Форматирование операторов if

Это не священная война, это не вопрос «что лучше».

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

if (x) print "x is true";

if (x) 
    print "x is true";

В отличие от

if (x) { print "x is true"; }
if (x) {
    print "x is true";    
}

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

Обновлять: Поскольку самый популярный ответ игнорирует фактический вопрос (даже если он представляет собой наиболее разумный совет), вот обзор профи без скобок.

  1. Компактность
  2. Более читабельный для некоторых
  3. Скобки вызывают область видимости, которая в некоторых случаях имеет теоретические накладные расходы.

Вы не можете дополнить «это не то, что лучше», «каковы плюсы». Оба они сравнения.

John Sheehan 19.09.2008 02:10

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

Alan Storm 19.09.2008 02:23

Разве это не один из вопросов, которые Джефф однозначно «запретил» одно время? Что может кто-нибудь получить от прочтения этого?

Outlaw Programmer 01.10.2008 00:19

Для вопроса, помеченного как 'c', удивительно видеть нотации, отличные от C, такие как 'print "x is true";'

Jonathan Leffler 10.07.2009 09:36

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

Alan Storm 10.07.2009 11:28

@AlanStorm, вы должны пометить его как python :)

WonderLand 23.08.2017 12:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
6
32 485
42
Перейти к ответу Данный вопрос помечен как решенный

Ответы 42

Я категорически не люблю любой стиль, в котором тест if и тело ставятся на одну линию.

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

Я согласен, но многие программисты, похоже, не согласны. У них должны быть свои причины.

Alan Storm 19.09.2008 02:44

Visual Studio 2008 (2005?) Может выполнять отладку по оператору, а не по строке.

spoulson 19.09.2008 05:21

А как насчет "if (blah) {return;}"? Мне это кажется довольно безобидным, даже если вы пытаетесь установить там точку останова.

Parappa 19.09.2008 05:52

Да, но если вы разделите каждый оператор if в тесте и инструкции на отдельные строки, то вам следует сделать это для состояний if-x-return, ради согласованности.

Aleksandar Dimitrov 19.09.2008 10:59

Всегда есть исключения (поговорим о логическом узле ...) «Глупая последовательность - хобгоблин маленьких умов».

Matt Dillard 19.09.2008 23:06

@AlanStorm, возможно, причина в том, что это просто лень ... и вы не можете их отлаживать, это звучит основным недостатком.

WonderLand 06.03.2015 05:36

Пробел - ваш друг ....

но, опять же, мне нравится:

if (foo)
{
    Console.WriteLine("Foobar");
}
Ответ принят как подходящий

Я нахожу это:

if ( true ) {
    DoSomething();
} else {
    DoSomethingElse();
}

лучше чем это:

if ( true )
    DoSomething();
else
    DoSomethingElse();

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

Кроме того, если «DoSomething» происходит с многострочным макросом, вы можете столкнуться с проблемами.

Trent 19.09.2008 03:16

Мне также нравится соглашение о том, что все операторы if начинаются и заканчиваются скобками, даже если они содержат только одну команду ... Кстати, причина, по которой эта `` функция '' была введена, была (вероятно) в том, что еще на заре программирования хотелось как можно меньше печатать ...

sven 01.10.2008 00:15

Я согласен, но это менее важно в наши дни, когда редакторы автоформатирования, такие как Eclipse и NetBeans, исправят за вас отступы, которые сразу сообщат вам, что что-то не так (при условии, что вы часто нажимаете последовательность клавиш «исправить код»).

Bill K 14.01.2009 21:08

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

priestc 10.07.2009 08:58

Я везде использую скобки, чтобы код был единообразным и более читаемым для меня ... в качестве альтернативы мне не нравится форма (true) ? dosomething() : dosomethingelse()

WonderLand 23.08.2017 12:39

Я всегда использую

if (x) 
{
    print "x is true";    
}

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

В сторону: вот почему мне также нравится понимание отступов в Python. Вы все равно собираетесь сделать отступ, это может что-то значить. Этот аргумент встречается только в языках, которые делают блокирующие символы (в данном случае {}) необязательными / условными.

Benjamin Autin 19.09.2008 08:06

Я согласен с Ферруччо (stackoverflow.com/questions/97506/formatting-of-if-statemen‌ ts /…) в том, что ваш аргумент довольно слабый. Это настолько легкая ошибка, что она также врезается в головы начинающих программистов до такой степени, что они (по крайней мере, я) распознают и исправляют ее неосознанно.

Chris Lutz 10.07.2009 09:27

if
{
// code
}
else 
{
// else code
}

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

Это терроризм против эстетики кода! Я бы не хотел работать с этим кодом.

piotr 10.07.2009 09:10

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

Jonathan Leffler 10.07.2009 09:40

Для меня фигурные скобки облегчают просмотр хода программы. Это также упрощает добавление оператора в тело оператора if. Когда фигурных скобок нет, вы должны добавить фигурные скобки, чтобы добавить еще один оператор.

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

Расстояние между строками и отступы могут значительно улучшить читаемость.

Что касается удобочитаемости, я предпочитаю следующее:

// Do this if you only have one line of code
// executing within the if statement
if (x)
    print "x is true";

// Do this when you have multiple lines of code
// getting executed within the if statement    
if (x)
{
    print "x is true";
}

Если я кодирую:

if (x) 
    print "x is true";

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

if (x) 
    print "x is true";
    print "x is still true";

что приведет к логической ошибке, по сравнению с:

if (x) { 
    print "x is true";
    print "x is still true";
}

Я считаю, что фигурные скобки облегчают чтение и устранение таких логических ошибок.

ЭТО. Миллион раз: ЭТО.

Zack Peterson 19.09.2008 02:23

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

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

что все делают то же самое главное

Видите ли, я не согласен с правилом «пока вы последовательны». Существуют определенные стили, которые могут помочь вам устранить ошибки в вашем программировании, и большинство программистов - люди, которые иногда могут быть непоследовательными в своем стиле.

Alan Storm 19.09.2008 02:46

я использую

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

if (x)
{
    print "x is true";
}

Открывающая и закрывающая скобки в одном столбце позволяют легко найти несовпадающие скобки и визуально изолируют блок. Открывающая скобка в том же столбце, что и «если», позволяет легко увидеть, что блок является частью условного оператора. Дополнительный пробел вокруг блока, созданный строками, содержащими только фигурные скобки, позволяет легко определить его логическую структуру при беглом чтении кода. Всегда явное использование фигурных скобок помогает избежать проблем, когда люди позже редактируют код и неправильно понимают, какие операторы являются частью условного выражения, а какие нет - отступы могут не соответствовать действительности, но заключенные в фигурные скобки всегда будут.

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

Одиночный оператор, если в блоках отсутствуют фигурные скобки:

Плюсы:

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

Минусы:

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

As in:

if (x) 
    print "x is true";
    print "something else";

Независимо от того, что я иду! Смотрится лучше всего.

If(x)
{
    print "Hello World !!"
}
Else
{
    print "Good bye!!"
}

Если вам интересно, как называются различные стили форматирования кода, в Википедии есть статья о Стили отступа.

Джоэл Спольски написал хорошую статью: Сделать неправильный код неправильным

Он специально занимается этим вопросом ...

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

In this case the code is 100% correct; it conforms to most coding conventions and there’s nothing wrong with it, but the fact that the single-statement body of the ifstatement is not enclosed in braces may be bugging you, because you might be thinking in the back of your head, gosh, somebody might insert another line of code there

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

… and forget to add the braces, and thus accidentally make foo(i)unconditional! So when you see blocks of code that aren’t in braces, you might sense just a tiny, wee, soupçon of uncleanliness which makes you uneasy.

Он предлагает вам ...

… deliberately architect your code in such a way that your nose for uncleanliness makes your code more likely to be correct.

Я считаю этот аргумент неубедительным. У меня всегда есть.

Jonathan Leffler 10.07.2009 09:41

Если вы сделаете что-то вроде этого:

if (x)
{
    somecode;
}
else
{
    morecode;
}

Это лучше работает для директив системы управления версиями и препроцессора. на коде, который живет долго. Проще добавить #if или около того без непреднамеренное нарушение оператора или необходимость добавления дополнительных строк.

к этому немного странно привыкать, но после пока.

(1) Я не понимаю, какое отношение это имеет к добавлению таких директив препроцессора, как #if - вы можете это объяснить? (2) Я считаю, что я вроде как понимаю, что вы говорите о системе управления версиями, но это не совсем понятно, и мне также может быть полезно дополнительное объяснение. (3) Почему вы говорите, что к этому «немного странно привыкать»? Это то, чему учили многих, и любой, у кого есть опыт программирования в реальном мире, видел такой код; это не похоже на что-то модное или причудливое.

Scott 23.08.2017 00:18

Я бы хотел, чтобы среда IDE обеспечивала такое поведение. Как вы правильно заметили, «правильного» поведения не бывает. Последовательность важнее ... это может быть любой стиль.

Я использую

if (x)
{
    DoSomething();
}

для нескольких строк, но я предпочитаю одинарные вкладыши без скобок:

if (x)
   DoSomething();
else
   DoSomethingElse();

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

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

priestc 10.07.2009 09:03

+1 - Я согласен, что однострочные if () - это нормально. Любой, кто добавляет в ваш код, должен быть достаточно опытным, чтобы знать, что они должны добавлять скобки, если они добавляют больше строк. Любой, кто не знает хотя бы так много, не будет работать с моим кодом.

Chris Lutz 10.07.2009 09:32

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

Ryan Shillington 01.04.2012 15:40

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

if (a)
  foo();
  bar();

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

* (предостережение, когда foo (); bar (); было расширением макроса, но это проблема с макросами, а не с фигурными скобками с ifs.)

Не много, но я это видел

johnc 19.09.2008 03:14

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

epochwolf 19.09.2008 04:17

да, я тоже видел это.

nickf 19.09.2008 09:57

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

Cody Hatch 19.09.2008 10:00

Visual Studio исправит вводящий в заблуждение формат с помощью функции автоматического форматирования (не уверен, есть ли аналогичные функции в других IDE). Тем не менее, единственный раз, когда я действительно опускаю скобки, - это когда мое условие if либо возвращается, либо прерывается, либо вызывает исключение.

ebrown 22.05.2009 23:20

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

public void MyFunction(object param)
{
     if (param == null) return;

     ...
}

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

Как и Мэтт (3 выше), я предпочитаю:

if (x)
{
    ...statement1
    ...statement2
}

и

if (x)
    ...statement
else
    ...statement

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

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

if (x)
   print "x is true"
for (int i=0; i<10; i++)
   print "y is true"

И так далее. Если кому-то нужно добавить еще одно утверждение, он может просто добавить фигурные скобки. Даже если у вас нет R # или чего-то подобного, это очень мелочь.

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

Если это одна строка if (и, возможно, одна строка else), я предпочитаю не использовать скобки. Он более читабельный и лаконичный. Я говорю, что предпочитаю это, потому что это чисто вопрос предпочтения. Хотя я думаю, что пытаться обеспечить соблюдение стандарта, согласно которому вы всегда должны использовать фигурные скобки, довольно глупо.

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

Хотел бы я дать этому больше одного голоса - это точно подводит итог тому, что я чувствую.

Bill Forster 10.07.2009 09:34

if (x) {
    print "x is true";    
}
else {
    do something else;
}

Я всегда набираю брекеты. Это просто хорошая привычка. По сравнению с мышлением, набор текста - это не «работа».

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

Всегда использовать фигурные скобки - хорошая идея, но всегда дается стандартный ответ: «А что, если кто-то добавит строку кода и забудет добавить фигурные скобки?» это довольно слабая причина.

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

Он начинается довольно невинно с простого оператора if.

if (condition)
    do_something();
else
    do_something_else();

Что все хорошо.

Затем кто-то приходит и добавляет к условию if еще одно условие. Они не могут добавить его с помощью && к самому оператору if, потому что логика будет неправильной, поэтому они добавляют еще один if. Теперь у нас есть:

if (condition)
    if (condition2)
        do_something();
else
    do_something_else();

Ты видишь проблему? Это может выглядеть правильно, но компилятор видит это иначе. Он видит это так:

if (condition)
    if (condition2)
        do_something();
    else
        do_something_else();

Что означает совсем другое. Компилятор не заботится о форматировании. Другое идет с ближайшим if. С другой стороны, люди полагаются на форматирование и легко могут упустить проблему.

Хорошее мышление - я думаю, это одно из преимуществ чего-то вроде Python, где отступы имеют синтаксическое значение.

Rich Bradshaw 20.09.2008 17:45

ps ... НИКОГДА не вставляйте ifs без фигурных скобок, если их еще нет. Представление о том, что кто-то может сделать то, что сказал автор, ранит мою душу.

Bill K 14.01.2009 21:11

Пока что я чувствую себя проигравшим, но ручаюсь за одно из:

if (expr) {
   funcA();
}
else {
   funcB();
}

Или сокращенное обозначение в ограниченных случаях для удобочитаемости:

if (expr) funcA();
else funcB();

Для меня сокращенный формат удобен, когда вы хотите, чтобы он читался как английская грамматика. Если код выглядит недостаточно читабельным, я выделю строки:

if (expr)
   funcA();
else
   funcB();

С осторожностью я не помещаю вложенные условные выражения в блоки if / else, чтобы избежать двусмысленности кодера / компилятора. Если что-то сложнее, я использую скобы как на блоках if, так и на else.

Итак, вы «голосуете» за ... все три варианта?

Scott 23.08.2017 00:27

/* I type one liners with brackets like this */
if (0){return(0);}
/* If else blocks like this */
if (0){
    return(0);
}else{
    return(-1);
}

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

Я бы не стал считать добавление пробела между «если» и его скобкой «лишним». Бьюсь об заклад, вы один из тех, кто пишет «if (x = 1) {x = y + z;}». Я считаю, что один из самых трудных для чтения стилей кодирования - это ...

nickf 19.09.2008 09:59

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

public int IndexOf(string haystack, string needle)
{
    // check parameters.
    if (haystack == null)
        throw new ArgumentNullException("haystack");
    if (string.IsNullOrEmpty(needle))
        return -1;

    // rest of method here ...

Единственное преимущество - компактность. Программисту не нужно перебирать ненужные {}, когда совершенно очевидно, что:

  • метод завершается на любой истинной ветке
  • довольно очевидно, что это все однострочные

Тем не менее, я всегда {} за логику программы по причинам, указанным другими. Когда вы опускаете скобки, слишком легко мысленно зафиксировать их, когда их нет, и внести небольшие дефекты кода.

s / throught / through / (я не могу предложить односимвольное редактирование, и я не вижу никаких других изменений, которые стоит внести.) Кстати, симпатичный пример кода.

Scott 23.08.2017 00:33

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

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

Из предложенных вариантов я бы выбрал

if (x) {
  print "x is true";    
}

просто потому, что скобки - это привычка печатать.

На самом деле, как программист, в основном использующий Perl, я, скорее всего, буду использовать

print "x is true" if x;

(Что всегда сбивает меня с толку, когда я работаю на языке, который не поддерживает постфиксные условные выражения.)

Я предпочитаю однострочные операторы без скобок, я знаю, что существует опасность, что я могу забыть добавить их, когда вставляю новую строку кода, но я не могу вспомнить, когда это произошло в последний раз. Мой редактор (vim) не позволяет мне писать такие вещи:


if (x)
    x = x + 1;
    printf("%d\n", x);

потому что отступ будет по-другому. Единственное, с чем у меня были проблемы, это плохо написанные макросы:


#define FREE(ptr) {free(ptr); ptr = NULL;}

if (x)
    FREE(x);
else
    ...

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

Таким образом, возможны проблемы с таким форматом, но они не фатальны. В конце концов, это дело вкуса.

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

Я предпочитаю следующее ... я думаю, что это выглядит чище.

if (x)
{
    code;
}
else
{
     other code;
}

Мне не нравятся закрывающие фигурные скобки в одной строке с ключевым словом follow:

if (x) {
    print "x is true";    
} else {
    do something else;
}

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

if (x) {
    print "x is true";    
}
//else {
//    do something else;
//}

Я всегда предпочитаю это:

if (x) doSomething();

if (x) {
    doSomthing();
    doOtherthing();
}

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

Я полагаю, что я больше не такой, как я думал; Я этого еще не заметил.

Я фанат

if (x)
{ foo(); }

Он кажется компактным и читаемым (я ненавижу растягивающиеся фигурные скобки), но он делает объем условия явным.

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

if (x)
{ foo(); }
else
{
   bar();
   baz();
}

Редактировать: похоже, я неправильно прочитал исходный вопрос, поэтому этот ответ не по теме. Однако мне все еще любопытно получить какой-либо ответ.

Один вкладыш - это просто ... один вкладыш и должен оставаться таким:

if (param == null || parameterDoesNotValidateForMethod) throw new InvalidArgumentExeption("Parameter null or invalid");

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

if (something)
{
    for(blablabla)
    {
    }
}else if
{
 //one liner or bunch of other code all get the braces
}else
{
  //... well you get the point
}

При этом ... Я презираю фигурные скобки в одной строке вот так:

if (someCondition) { doSimpleStuff; }

худшего

if (somethingElse){
  //then do something
}

Он более компактный, но мне сложнее следить за подтяжками.

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

    if (someStuff)
        {
  //do something
        }

Другой способ - написать:

(a==b) ? printf("yup true") : printf("nop false");

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

int x = (a==b) ? printf("yup true") : printf("nop false");

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

evandentremont 04.03.2015 23:03

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

if (x > y)      { xIsGreaterThanY(); }
else if (y > x) { yIsGreaterThanX; }
else           { xEqualsY(); }

Для меня это гораздо более читабельно, чем:

if ( x > y ){
    xIsGreaterThanY(); 
}else if ( x < y){
    yIsGreaterThanX();
}else{
    xEqualsY();
}

Это дает дополнительное преимущество, поскольку побуждает людей абстрагировать логику в методы (как это сделал я) вместо того, чтобы продолжать сваливать больше логики во вложенные блоки if-else. Он также занимает три строки, а не семь, что может позволить не прокручивать, чтобы увидеть несколько методов или другой код.

Я считаю, что это самая важная причина, и я был поражен, увидев, что это еще не было дано в качестве ответа (хотя это было упомянуто в комментарий, сноска в ответ и отступление в ответ).

Вы всегда должны использовать скобки, потому что

if (x)
   DoSomething();

прерывается, если DoSomething впоследствии переопределяется как макрос с несколькими операторами:

#define DoSomething()          statement1 ;statement2 ;

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

#define DoSomething()    do {statement1 ;  statement2 ;  } while (0)
which makes the macro behave more like a statement.

Тем не менее, я признаю, что не следую своему собственному совету; Я обычно не использую фигурные скобки, когда у меня есть (что кажется) единственное утверждение. (От стыда опускает голову.)

Другие вопросы по теме