Было бы плохой формой ставить фигурные скобки в одну строку с оператором для однострочных операторов if? - PullRequest
9 голосов
/ 31 октября 2008

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

if(something == true)
    DoSomething();
    DoSomethingElse();

при быстром редактировании кода, если вы не ставите скобки.

Как насчет этого, хотя:

if(something == true)
{   DoSomething(); }

Таким образом, вы по-прежнему занимает меньше строк (что делает ИМО более читабельным), но при этом вряд ли случайно ошибетесь сверху?

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

public string Name 
    {get;set;}

Не спрашивать, что лучше, так как это слишком субъективно, а скорее просто, будет ли это считаться приемлемым стилем, а если нет, то почему бы и нет.

Ответы [ 21 ]

20 голосов
/ 31 октября 2008

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

if (something == true) DoSomething();

Это быстро, просто и экономит место.

10 голосов
/ 31 октября 2008

Вместо:

if(something == true)
{   DoSomething(); }

Сделайте это:

if(something == true) {   DoSomething(); }
9 голосов
/ 31 октября 2008

Я склонен ставить открывающие скобки на своей собственной линии следующим образом:

if (condition)
{
   statement;
   statement;
}

Итак, увидев что-то вроде:

if (condition)
   statement;
   statement;

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

if (condition)
   statement;

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

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

6 голосов
/ 31 октября 2008

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

Лично мне нравится заниматься:

if(foo)
    DoSomething();

или

if(foo) DoSomething();

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

6 голосов
/ 31 октября 2008

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

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

Например, отладчик VS2008 для кода C ++ будет перешагивать через эту строку одной строкой, затрудняя определение вызова Foo ().

if (a==b) { Foo(); }
5 голосов
/ 01 ноября 2008

Лично мне нравятся все мои блоки с одинаковым рисунком. Я всегда использую скобки для ifs, и они всегда начинают новую строку. Мне нравится идиома автоматического определения общедоступных свойств для установки {get; задавать; } на той же строке. Я просто чувствую, что все блоки, начинающиеся с фигурной скобки на отдельной строке, улучшают читабельность. Как уже отмечали другие, в отладчике также становится понятнее, если вы пересекаете строки.

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

Я бы сделал:

if (something)
{
   DoSomething();
}

и

public string MyProperty { get; set; }
3 голосов
/ 31 октября 2008

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

На фронте оскорбительного стиля это намного лучше, чем невероятное:

  if (something== true)   {
      DoSomething();
  }

Но, пока мы говорим о стиле, это

  if (something)

и

  if (!something)

Никогда

  if (something== true)  

или

  if (something== false) 
3 голосов
/ 31 октября 2008

Таким образом, вы по-прежнему занимает меньше строк (что делает ИМО более читабельным)

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

2 голосов
/ 31 октября 2008

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

if (something == true) 
    DoSomething();

и я хотел отладочную печать до вызова DoSomething(). Что бы я сделал инстинктивно

if (something == true) 
    print("debug message");
    DoSomething();

Но это заставит if применяться только к отладочному сообщению, тогда как DoSomething() будет вызван безоговорочно. Вот почему я предпочел бы иметь фигурные скобки, чтобы инстинктивное редактирование заканчивалось так:

if (something == true) {
    print("debug message");
    DoSomething();
}
1 голос
/ 31 октября 2008

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

Сказав это, нет ничего плохого в том, что вы и ваша команда используете ваш стиль. Пока вы все согласны с этим.

...