Различные способы написания выражения "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";
}
Аналогичный вопрос:
Почему считается, что плохая практика пропускает фигурные скобки?
Ответы
Ответ 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).