kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 rjzii
rjzii
Вопрос

Какой стиль предпочтителен для отдельных заявлений о принятии решений и действиях?

В случае языков, которые поддерживают одиночное решение и действие без скобок, как, например, в следующем примере:

if (var == true)
    doSomething();

Какой способ написания этого предпочтителен? Должны ли скобки использоваться всегда, или их использование должно быть оставлено на усмотрение отдельного разработчика? Кроме того, зависит ли эта практика от размера блока кода, как в следующем примере:

if (var == 1)
    doSomething(1);
else if (var > 1 && var < 10)
    doSomething(2);
else
{
    validate(var);
    doSomething(var);
}
3 2008-08-14T14:23:11+00:00 20
 River
River
Редактировал вопрос 8-го февраля 2018 в 9:11
Программирование
language-agnostic
language-features
readability
Решение / Ответ
 stimms
stimms
14-го августа 2008 в 2:27
2008-08-14T14:27:26+00:00
Дополнительно
Источник
Редактировать
#8414938

Нет'т действительно правильный ответ. Это какие стандарты кодирования в компании для. Если вы можете держать его в соответствие всей компании в целом, то его будет легко читать. Мне лично нравится

if ( a == b)    {
    doSomething();
}
else {
    doSomething();
}

но это священная война.

10
0
 ZombieSheep
ZombieSheep
14-го августа 2008 в 2:31
2008-08-14T14:31:55+00:00
Дополнительно
Источник
Редактировать
#8414940

Я рекомендую

if(a==b)
{
    doSomething();
}

потому что я считаю, что гораздо проще сделать его, чем пытаться вспомнить, чтобы добавить скобки при добавлении второго заявления, чтобы условие успеха...

if(a==b)
    doSomething();
    doSomethingElse();

очень отличается от

if(a==b)
{
    doSomething();
    doSomethingElse();
}

см. Джоэл'статья для более подробной информации

10
0
 Kev
Kev
14-го августа 2008 в 2:32
2008-08-14T14:32:35+00:00
Дополнительно
Источник
Редактировать
#8414941

Я предпочитаю использовать брекеты во все времена. Вы можете сделать некоторые незначительные ошибки, где вы начали с чем-то вроде:

if(something)
 DoOneThing();
else
  DoItDifferently();

а потом решили добавить еще одну операцию в пункте " еще " и забудьте заключить его в скобки:

if(something)
 DoOneThing();
else
  DoItDifferently();
  AlwaysGetsCalled(); 

`AlwaysGetsCalled () всегда будет вызываться, и если вы'вэ сидел в 3 часа ночи интересно, почему ваш код ведет себя странно, что-то подобное может ускользать от вас в течение некоторого времени. Только по этой причине, я всегда использовать фигурные скобки.

 Kev
Kev
Редактировал ответ 12-го марта 2009 в 5:44
8
0
Jon Limjap
Jon Limjap
14-го августа 2008 в 2:27
2008-08-14T14:27:17+00:00
Дополнительно
Источник
Редактировать
#8414937

Я предпочитаю быть последовательным, например, если вы используете скобки в одном блоке, используйте их везде, даже в одном утверждении:

if (cond1)
{
   SomeOperation();
   Another();
}
elseif (cond2)
{
   DoSomething();
}
else
{
   DoNothing();
   DoAnother();
}

Но если у вас просто куча однострочных высказываний:

if (cond1)
    DoFirst();
elseif (cond2)
    DoSecond();
else
    DoElse();

Так выглядит чище (если вы не возражаете против фиктивных имен методов ;), но это только мое мнение.

Это также относится к конструкциям циклов и тому подобным:

foreach (var s as Something)
    if (s == someCondition)
        yield return SomeMethod(s);

Вы также должны учитывать, что это соглашение может больше подходить для .NET (обратите внимание, что любители Java предпочитают располагать первую фигурную скобку в той же строке, что и if).

Jon Limjap
Jon Limjap
Редактировал ответ 14-го августа 2008 в 2:30
4
0
 Rytmis
Rytmis
14-го августа 2008 в 7:19
2008-08-14T19:19:40+00:00
Дополнительно
Источник
Редактировать
#8414949

Мел это отсутствие опыта, но на протяжении всех семи лет работы как код обезьяны я'ве не на самом деле видел кого-то, сделать ошибку, не добавив скобки при добавлении кода в блок, который не'т иметь брекеты. Что'ы точно ноль раз.

И до острословов добраться до него, нет, причина вовсе'т "у всех всегда использует брекеты и".

Таким образом, честный вопрос-я действительно хотел бы получить фактические ответы, а не просто "против": это когда-нибудь произойдет на самом деле?

(Edit: я'вэ наслушался аутсорсинг страшилки, чтобы немного прояснить ситуацию: это когда-нибудь все-таки произойдет грамотные программисты?)

3
0
Dewm Solo
Dewm Solo
2-го сентября 2008 в 12:50
2008-09-02T12:50:15+00:00
Дополнительно
Источник
Редактировать
#8414950

Я лично на стороне с Макконнелл'объяснение от полного кода.

Используйте их всякий раз, когда вы можете. Они увеличивают ваш код'ы читаемость и удалите несколько и скудные недоразумений, которые могут возникнуть.

Есть одна вещь, что's более важно, хотя....Последовательности. Какой-либо стиль вы используете,убедитесь, что вы всегда делают это одинаково.

Начать писать нечто вроде: в <предварительно> в <код> Если a == правда FunctA();

Если B = = С "Тест"и { FunctB(); } </код> </пред>

Вы обязаны в конечном итоге глядя на странный баг, когда компилятор выиграл'т понять, что вы пытались сделать и что будет трудно найти.

В принципе найти то, что вам удобно писать каждый раз и придерживайтесь его. Я верю в через блок, разделители('{', '}') как можно в путь.

Я не'т хотите начать вопрос внутри другой, но есть что-то, относящееся к этому, что я хочу отметить, чтобы получить ваш умственный тонус. Одно решение с помощью кронштейнов было сделано. Где вы поставить открывающую скобку? На той же линии, как инструкции или под ним. Отступ скобках или нет? в <предварительно> в <код> Если a == ложь { //звонки и прочее } //или Если B == "и блабла"и { //звонки и прочее } //или Если C == Б { //звонки и прочее } </код> </пред>

Пожалуйста, Дон'т ответ на это, так как это будет новый вопрос. Если я вижу интерес к этому, я открою новый вопрос Ваш вклад.

2
0
 Stu
Stu
14-го августа 2008 в 2:25
2008-08-14T14:25:17+00:00
Дополнительно
Источник
Редактировать
#8414935

Это не имеет значения, если вы последовательны в этом.

Существует тенденция требовать одинаковости в пределах одного утверждения, т.е. если есть скобки в одной ветке, то скобки есть везде. Стандарты кодирования ядра Linux, например, предписывают это.

2
0
 Nick
Nick
14-го августа 2008 в 2:32
2008-08-14T14:32:51+00:00
Дополнительно
Источник
Редактировать
#8414943

Я бы решительно выступаем всегда с помощью фигурных скобок, даже если они'повторно необязательно. Почему? Взять этот кусок кода на C++:

if (var == 1)
  doSomething();
doSomethingElse();

Теперь, кто-то приходит, кто это'т действительно уделяет достаточно внимания и решит, что что-то дополнительное должно произойти, если (переменная == 1), поэтому они делают это:

if (var == 1)
  doSomething();
  doSomethingExtra();
doSomethingElse();

Это's все еще красиво изрезана, но он выиграл'т делать, что было задумано.

Только с помощью брекетов, вы'ре более вероятно, чтобы избежать такого рода ошибок.

2
0
James  A. Rosen
James A. Rosen
14-го августа 2008 в 4:29
2008-08-14T16:29:24+00:00
Дополнительно
Источник
Редактировать
#8414947

Рубин хорошо устраняет один вопрос в обсуждении. Стандарт один-лайнер:

do_something if (a == b)

и для нескольких строк:

if (a == b)
  do_something
  do_something_else
end

Это позволяет краткие однострочные выражения, но это заставляет вас реорганизовать заявление, если вы уходите от одного до нескольких-линия.

Это (пока) не доступны в Java, ни во многих других языках, насколько мне известно.

1
0
Анонимный пользователь
16-го сентября 2008 в 10:42
2008-09-16T22:42:24+00:00
Дополнительно
Источник
Редактировать
#8414952

Солнце'ы код конвенций по программированию на языке Java и это, в котором говорится:

Если-нибудь класс заявления иметь следующую форму:

если (условие) { заявления; }

если (условие) { заявления; } еще { заявления; }

если (условие) { заявления; } остальное, если (условие) { заявления; } еще { заявления; }

1
0
 Eldila
Eldila
14-го августа 2008 в 2:32
2008-08-14T14:32:48+00:00
Дополнительно
Источник
Редактировать
#8414942

Нет правильного или неправильного способа написать вышеуказанное заявление. Есть много принятых кодирования стили. Однако, для меня, я предпочитаю сохраняя стиль кодирования состоят на протяжении всего проекта. т. е. Если проект используя K&стиль R, необходимо использовать K&Р.

1
0
Ryan Ahearn
Ryan Ahearn
14-го августа 2008 в 2:28
2008-08-14T14:28:36+00:00
Дополнительно
Источник
Редактировать
#8414939

Я'ве всегда использовать скобки во все времена за исключением случая, когда я'м проверка переменной на null, прежде чем освободить его, как надо в C

В таком случае, убедитесь, что он'понятно, что это'С одной инструкции, сохраняя все в одной строке, как это:

if (aString) free(aString);
1
0
Adam Lassek
Adam Lassek
14-го августа 2008 в 7:14
2008-08-14T19:14:11+00:00
Дополнительно
Источник
Редактировать
#8414948

Как уже упоминалось, делает если заявление в две строки без брекетов может привести к путанице:

if (a == b)
    DoSomething();
    DoSomethingElse(); <-- outside if statement

так что я разместить его на одной строке, если я могу сделать это без вреда для читабельности:

if (a == b) DoSomething();

а во всех остальных случаях я использую брекеты.

Тернарные операторы немного отличаются. Большую часть времени я делаю их в одной строке:

var c = (a == b) ? DoSomething() : DoSomethingElse();

но иногда высказывания вложенных вызовов функции или лямбда-выражения, которые сделать он-лайн заявление трудно разобрать визуально, так что я предпочитаю что-то вроде этого:

var c = (a == b)
    ? AReallyReallyLongFunctionName()
    : AnotherReallyReallyLongFunctionOrStatement();

Еще более кратким, чем оператор if/else блок, но легко увидеть, что's идя дальше.

1
0
David Thornley
David Thornley
12-го марта 2009 в 6:02
2009-03-12T18:02:30+00:00
Дополнительно
Источник
Редактировать
#8414954

Золотое правило состоит в том, что при работе в существующий проект, следовать стандартам кодирования.

Когда я'м дома, у меня есть две формы.

Первый-это одиночная линия:

if (condition) doThis();

и второе-на несколько строк:

if (condition) {
   doThis();
}
Jason Plank
Jason Plank
Редактировал ответ 17-го ноября 2011 в 3:06
0
0
Chris Benard
Chris Benard
14-го августа 2008 в 2:27
2008-08-14T14:27:03+00:00
Дополнительно
Источник
Редактировать
#8414936

Наш начальник заставляет нас ставить { } после утверждения о решении, независимо от того, что это за утверждение, даже если оно одно. Это очень раздражает - добавлять две лишние строки. Единственное исключение - троичные операторы.

Наверное, хорошо, что у меня монитор с кодом в портретной ориентации с разрешением 1200x1600.

0
0
Pascal Paradis
Pascal Paradis
14-го августа 2008 в 2:33
2008-08-14T14:33:00+00:00
Дополнительно
Источник
Редактировать
#8414944

Я склонен согласиться с Джоэл Спольски о том, что одна с этой статьей (делая неправильный код выглядеть неправильно) в следующем примере кода :

if (i != 0)
bar(i);
foo(i);

Фу сейчас unconditionnal. Который очень плохо!

Я всегда использовать скобки для принятия заявления. Это помогает ремонтопригодность код, и это делает код менее ошибка на лежке.

Pascal Paradis
Pascal Paradis
Редактировал ответ 14-го августа 2008 в 2:46
0
0
 Baltimark
Baltimark
14-го августа 2008 в 2:42
2008-08-14T14:42:47+00:00
Дополнительно
Источник
Редактировать
#8414945

Я предпочитаю

if (cond)
   {
   //statement
   }

даже с только одной инструкции. Если вы собирались что-то писать, не было никаких сомнений, что он работал, и никогда не планировал еще один кодер не глядя на этот код, идти вперед и использовать любой нужный вам формат. Но, что делает дополнительный брекетинг действительно стоило? Меньше времени в течение года, чем требуется для того, чтобы напечатать этот пост.

Да, мне нравится моя отступ кронштейнов на уровне блока тоже.

Питон хорош тем, что отступ определяет блок. Это спорный вопрос на языке, как это.

0
0
 t3rse
t3rse
14-го августа 2008 в 3:08
2008-08-14T15:08:51+00:00
Дополнительно
Источник
Редактировать
#8414946

Я привыкла следить за "и использовать фигурные скобки всегда" по линии, как аппаратчик. Однако, я'вэ изменил мой стиль, чтобы позволить опуская их на одну линию условного выражения:

if(!ok)return;

Для любого хотя сценарий из нескольких инструкций я'м по-прежнему считают, что брекеты должны быть обязательными:

if(!ok){

    do();

    that();

    thing();
}
Jason Plank
Jason Plank
Редактировал ответ 17-го ноября 2011 в 3:07
0
0
Анонимный пользователь
16-го сентября 2008 в 9:50
2008-09-16T21:50:42+00:00
Дополнительно
Источник
Редактировать
#8414951

Я использую фигурные скобки вокруг каждое высказывание, если и только если хотя бы один из них этого требует.

0
0
Brad Gilbert
Brad Gilbert
17-го сентября 2008 в 6:02
2008-09-17T18:02:54+00:00
Дополнительно
Источник
Редактировать
#8414953

В Perl если вы делаете простой тест, то вы будете писать в таком виде:

do_something if condition;

do_something unless condition;

Что может быть очень полезным для проверки аргументов в начале функции.

sub test{
  my($self,@args) = @_;

  return undef unless defined $self;

  # rest of code goes here

}
0
0
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 3 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией