2008-08-14 2 views
3

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

if (var == true) 
    doSomething(); 

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

if (var == 1) 
    doSomething(1); 
else if (var > 1 && var < 10) 
    doSomething(2); 
else 
{ 
    validate(var); 
    doSomething(var); 
} 

ответ

10

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

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

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

2

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

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

0

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

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

4

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

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 peepz бы иметь свою первую фигурную скобку в той же строке, что и if).

1

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

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

if (aString) free(aString); 
10

Я рекомендую

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

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

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

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

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

см Joel's article для получения более подробной информации

+0

Вы должны всегда работать с брекетами в если/другое. Всегда всегда всегда. – 5arx 2010-12-01 15:11:32

8

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

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

, а затем решили добавить еще одну операцию в пункте else и забудьте обернуть его в фигурных скобках:

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

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

1

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

2

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

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

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

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

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

Всегда используя брекеты, вы, скорее всего, избежите такого рода ошибок.

0

Я склонен согласиться с Джоэлом Спольски на том с этой статьей (Making Wrong Code Look Wrong) со следующим примером кода:

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

Foo теперь unconditionnal. Это очень плохо!

Я всегда использую скобки для принятия решений. Он помогает поддерживать работоспособность кода и делает код менее подверженным ошибкам.

0

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

if (cond) 
    { 
    //statement 
    } 

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

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

Python хорош тем, что отступ определяет блок. Вопрос спорный на таком языке.

0

Раньше я использовал линию «использовать фигурные скобки всегда», как аппаратчик. Тем не менее, я изменил свой стиль, чтобы для опуская их на однолинейных условных выражений:

if(!ok)return; 

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

if(!ok){ 

    do(); 

    that(); 

    thing(); 
} 
+0

Почему downvote? – 2009-03-12 18:00:36

+0

Я не уверен, хотя я не сомневаюсь, что на StackOverflow есть аппаратчики. – t3rse 2009-03-13 17:09:16

1

Ruby прекрасно избегает одного вопроса в обсуждении. Стандарт для однострочника является:

do_something if (a == b) 

и для многострочно:

if (a == b) 
    do_something 
    do_something_else 
end 

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

Это еще не доступно на Java, а также на многих других языках, AFAIK.

1

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

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, но легко видеть, что происходит.

3

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

И до того, как wisecrackers доберутся до него, нет, причина не в том, что «все всегда используют фигурные скобки».

Итак, честный вопрос: я действительно хотел бы получить ответы на актуальные вопросы, а не только на downvotes: действительно ли это происходит на самом деле?

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

2

Я Personnally стороны с объяснением МакКоннеллой из Кодекса Complete.

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

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

начать писать такие вещи, как:

 

If A == true 
    FunctA(); 

If B == "Test" 
{ 
    FunctB(); 
} 
 

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

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

Я не хочу начинать вопрос внутри другого, но есть что-то связанное с этим, что я хочу упомянуть, чтобы получить ваши психические соки. Было принято решение использовать скобки. Где вы устанавливаете открывающий кронштейн? В той же строке, что и оператор или под ним. Отступные скобки или нет?

 

If A == false { 
    //calls and whatnot 
} 
//or 
If B == "BlaBla" 
{ 
    //calls and whatnot 
} 
//or 
If C == B 
    { 
    //calls and whatnot 
    } 
 

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

0

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

1

Солнца Code Conventions for the Java programming Language имеет this сказать:

Условный-другой класс утверждений следует иметь следующий вид:

if (condition) { 
    statements; 
} 

if (condition) { 
    statements; 
} else { 
    statements; 
} 

if (condition) { 
    statements; 
} else if (condition) { 
    statements; 
} else { 
    statements; 
} 
0

В 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

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

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

Первая одна строка:

if (condition) doThis(); 

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

if (condition) { 
    doThis(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^