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

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

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

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

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

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

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

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

public string Name 
    {get;set;}

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

Ответы [ 21 ]

0 голосов
/ 01 ноября 2008

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

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

Итак, если вы думаете, что это лучше, продолжайте. Если нет, то не надо. Это действительно так просто (если только вы не используете IDE, которая накладывает некоторые правила оформления)

0 голосов
/ 24 июня 2009

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

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

Да, именно так K & R сделал это ... и да, я возвращаюсь так далеко ... и да, это достаточно веская причина для меня. Это означает, что я получаю общий синтаксис, даже когда я делаю что-то вроде этого:

if (-1 == doSomething()) {
   doSomethingElse();
}

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

Я всегда сравниваю с литералом слева. Это позволяет избежать ошибки «тестирования присваивания» (например, если (что-то = истина) {...}).

Нет большей опасности для переносимости «(что-то == true)», чем для перегруженного набора значений, которые означают «true» и «false» в логическом сравнении - но это другой вид Опасность. Вы пишете на языке, который считает «пустой» (и / или ноль, и / или NULL, и / или пробел) «истинным» или «ложным»? Я предпочитаю соглашение, которое безопасно для каждого случая ... потому что я ленивый.

0 голосов
/ 01 ноября 2008

Обычно я делаю это с одной строкой, если:

if($something) {
    do_something();
}

Единственное исключение (я делаю Perl, не уверен, разрешен ли этот стиль в C #) для элементов управления циклом, где я использую инвертированный стиль в одну строку:

THING:
for my $thing (1 .. 10) {
    next THING if $thing % 3 == 0;
}

При хорошей раскраске синтаксиса можно резко выделить эти линии.

0 голосов
/ 01 ноября 2008

Вы все НЕПРАВИЛЬНО НЕПРАВИЛЬНО !!!!! ; -)

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

Пробелы - это стиль. Так как у нас разные стили чтения и стили обучения, на самом деле не имеет значения, как ты это делаешь. Инструменты позволят нам переключаться назад и вперед. Единственный недостаток, который я когда-либо замечал, - это плата за отслеживание изменений в системе контроля версий. Когда я переформатирую файл стиля K & R в более вменяемый формат (мое мнение) и проверяю это изменение в управлении исходным кодом, он показывает почти каждую строку как измененную. Это боль. Но многие утилиты сравнения могут игнорировать изменения пробелов (хотя большинство только на одной строке, а не на охватывающих линиях). Это проблема. Но не шоу-стоппер.

0 голосов
/ 01 ноября 2008

На самом деле, я очень предпочитаю

if (something == true)
if (something == false)

над

if (something)
if (!something)

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

if something:
if not something:

Если я не хочу отличать None от, например, пустого списка.

0 голосов
/ 01 ноября 2008

Мне иногда нравится делать

if(obj != null) obj.method();

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

public executeMethodOn(String cmd) {
  CommandObject co;

  if("CmdObject1".equals(cmd)) co=new CmdObject1();
  if("CmdObject2".equals(cmd)) co=new CmdObjec21();

  co.executeMethod();
}

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

Тем не менее, если у вас когда-либо есть такой шаблон, вы, вероятно, делаете это неправильно. Я должен был сделать это в системе, в которой не было отражения, но я попытался ДЕЙСТВИТЕЛЬНО СЛОЖНО обойти это, и если бы у меня было отражение, это было бы намного лучше.

0 голосов
/ 01 ноября 2008

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

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

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

Там нет никаких проблем ... фактически, Visual Studio не будет помещать этот код в собственную строку, если вы попытаетесь автоматически отформатировать его. Так что, если это более читабельно для вас ... у вас все хорошо.

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

Если вы действительно хотите сохранить строки кода, вы можете напечатать его так:

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

или это без фигурных скобок

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

Я бы порекомендовал вам, как сказали Стивен и Николас Манкузо.

Использование:

if(something) {   DoSomething(); }

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

Я обычно использую один лайнер для проверки.

Пример:

if( param1 == null ) throw new ArgumentNullException("param1");
...