Подтвердить что ты не робот

Различные способы написания выражения "if"

Я видел разные способы написания инструкции if.

Какой из них вы предпочитаете и почему?

Пример 1:

if (val % 2 == 1){output = "Number is odd";}else{output = "Number is even";} 

Пример 2:

if (val % 2 == 1)
{
    output = "Number is odd";
}
else
{
   output = "Number is even";
}

Пример 3:

if (val % 2 == 1)
output = "Number is odd";
else
output = "Number is even";

Пример 4:

if (val % 2 == 1){
output = "Number is odd";
} else {
output = "Number is even";
}

Аналогичный вопрос:

Почему считается, что плохая практика пропускает фигурные скобки?

4b9b3361

Ответ 1

Для таких случаев существует также условный оператор:

output = (val % 2 == 1) ? "Number is odd" : "Number is even";

Если вы определенно собираетесь использовать "если", я бы использовал версию 2 или версию 4, в зависимости от остальной части вашего стиля привязки. (На работе я использую 4, для личных проектов я использую 2.) Главное, что есть фигурные скобки даже вокруг отдельных утверждений.

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

if ((val & 1) == 1)

Ответ 2

Версия 2. Я всегда включаю скобки, потому что если вам понадобится поставить несколько строк под условным выражением, вам не придется беспокоиться о том, чтобы положить скобки на более позднюю дату. Это и гарантирует, что ВСЕ ваши утверждения if имеют одинаковую структуру, которая помогает при сканировании кода для определенного оператора if.

Ответ 3

Я использую версию 2.

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

if(SomeCondition)
{
  DoSomething();
}

Если вам нужно добавить еще одну строку кода, у вас будет меньше проблем:

if(SomeCondition)
{ 
  DoSomething();
  DoSomethingElse();
}

Без брекетов вы могли бы сделать это:

if(SomeCondition)
   DoSomething();
   DoSomethingElse();

Ответ 4

Я лично предпочитаю 3. Дополнительные фигурные скобки просто добавляют слишком много лишних визуальных шумов и пробелов.

Я могу несколько увидеть аргументы 2/4, чтобы уменьшить ошибки, но у меня лично никогда не было ошибки, потому что дополнительные строки были внутри оператора if. Я использую С# и визуальную студию, поэтому мой код всегда хорошо отформатирован. Однако это может быть проблемой, если бы я был программистом в стиле "блокнот".

Ответ 5

Я предпочитаю # 2. Легкая читаемость.

Ответ 6

Ничего из перечисленного.

Если в моем блоке выполнения есть только одна строка (даже если это огромный оператор for), то я не использую фигурные скобки, но я do отступы, похожие на # 3

if (num > 3)
     print "num is greater than 3";
else
     print "num is not greater than 3";

Пример с несколькими операторами, которым не нужны фигурные скобки:

if (num > 3)
    for (int i = 0; i < 100)
        print i + "\n";
else
    print "booya!";

Тем не менее, ответ Джона Скита в этом вопросе является лучшим

Ответ 7

Я согласен с тернарным оператором. Очень мало используется в коде, с которым я сталкиваюсь, и я думаю, что это намного проще и приятнее читать, чем все дополнительные скобки и отступы, которые требуется для записи инструкции if/else.

Ответ 8

Более важно быть последовательным, чем выбирать лучший.

Эти стили имеют разные преимущества и недостатки, но ничто не так плохо, как смешивание их внутри проекта или даже компиляции или внутри функции.


Тернарный оператор является очевидным выбором для этого конкретного кода. Для простого одиночного оператора if/else, который не может быть выражен иначе, я бы предпочел правильно отложенный случай 3:

if (val % 2 == 1)
    output = "Number is odd";
else
    output = "Number is even";

Я понимаю мотивацию "всегда использовать брекеты", но я лично никогда не был укушен их упущением (ОК, один раз. С макросом.)

Из вышеуказанных стилей я бы выбрал (2). (4) было бы нормально, если "правильно" отступом.
(1) Я бы назвал молодого разработчика, который, надеюсь, вырастет из "компактного кода" или того, кто не может позволить себе достойный монитор. Тем не менее, я бы пошел с ним, если это был локальный стиль.

Ответ 9

Я использую версию 2.

Ответ 10

Странно, что никто не упоминал об этом:

if ( x == 1) {
   ...
}
else {
   ...
}

Для меня это, конечно, единственный правильный путь: -)

Ответ 11

Я предпочитаю 4 себя, но я думаю, что 2 тоже хорошо.

Ответ 12

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

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

Несмотря на то, что по умолчанию для использования в фигурных скобках Visual Studio необходимо поместить фигурные скобки на новую строку (мой предпочтительный метод), Руководство по дизайну каркаса, первое издание) Кшиштофом Квалиной и Брэдом Абрамсом предлагают другое соглашение, например, 4, поместив открытую скобку в конец предыдущего предложения if (Страница 274). Они также указывают " Избегайте опускания брекетов, даже если язык позволяет это".

Не имея второе издание, я не мог сказать, изменились ли эти соглашения или нет.

Ответ 13

Я бы использовал их в следующем порядке: 1) Тернарный оператор 2) пример 3, но отступом правильно 3) либо 2, либо 4, они в основном одинаковы. Я бы пошел с тем, что было общим стилем, где я работал.

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

Тебе пришлось бы мучить меня, чтобы заставить меня использовать номер 1.

Ответ 14

Я всегда буду использовать # 2. # 4 - поистине ужасный макет, и это может сделать только тот, кто считает, что метод должен быть одного размера экрана в длину и будет делать все, чтобы втиснуть его, а не реорганизовать код!!!

Ответ 15

Лично я предпочитаю версию 2. Но так как это только формирование этого не имеет значения. Используйте, который лучше всего читается для вас и членов вашей команды!

Ответ 16

Я использую # 2 с незначительным изменением

if (condition1) 
{
      doStuff();
} else 
{
      doSomethingElse();
}

Ответ 17

Лично у меня есть два метода, которые я считаю хорошими:

Для if-блоков существует только этот способ:

if(...)
{
    // ...
}
else if (...)
{
    // ...
}
else
{
    // ...
}

Это самый безопасный и наиболее понятный способ записи if-else-блоков.

Для одного вкладыша (истинные однолинейные вкладыши, понятные в одной строке), вы можете использовать тернарный оператор.

var objectInstance = condition ? foo : bar;

// Or the binary operator when dealing with null values
var objectInstance = condition ?? foo;

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

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

Ответ 18

Версия №2 для меня - проще всего видеть, проще всего читать, легко видеть, где начинается и заканчивается if, то же самое, иначе вам не придется беспокоиться о том, чтобы вставить скобки, если вы хотите добавить несколько операторов.

Ответ 19

Одиночные короткие инструкции:

if (condition) output = firstChoice;
else doSomethingElse();

Несколько или длинных операторов

if (condition) {
   output = firstChoice;
   ...
} else {
   ...
}

Ответ 20

используется с фигурными скобками, я видел некоторую проблему с инструкцией if else без фигурных скобок (я точно не помню), т.е. Statement in if не был выполнен, когда я добавил то же самое с фигурными скобками, а только работал. (Использование Visual Studio и С# 4.0).