Блоки - фигурные скобки / нет фигурных скобок?

Когда я начал разрабатывать, я следовал учебникам, которые всегда использовали {} (фигурные скобки), чтобы заключить блоки. Однако, когда я начал смотреть на код других людей (например, классы на GitHub или просто больше кода в целом, чем то, что показывал бы базовый учебник), я также видел блок-операторы, не заключенные в {}, например;

if($var < 15)
     $string = 'Hello, Jimmy!';
elseif($var >= 15)
     $string = 'Hello, Anne!';

Такой же как

if($var < 15) { 
    $string = 'Hello, Jimmy!';
} elseif($var >= 15) {
    $string = 'Hello, Anne!';
}

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

То, что я спрашиваю,

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

б) есть ли передовой опыт, если он не используется {}?

Любые ответы, особенно те, вкл. Справочная информация / документы по соглашению об использовании фигурных скобок для блоков вместо их использования будет принята с благодарностью, так как мне бы очень хотелось понять использование фигурных скобок:)!

5 ответов

Решение

Вы можете опустить {} для одной строки:

if(something)
  do something else

однако вы не можете его опустить и продолжать так:

if(something)
   do one thing
   do another
   do some more

В приведенном выше примере будет только 1 условный элемент ("делай одно"). Остальные просто бегут безоговорочно.

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

Так что придерживайтесь использования {} в вашем коде.

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

Это в основном зависит от стиля, к которому вы привыкли. http://en.wikipedia.org/wiki/Indent_style

if (some_error)
    something(); //Will be executed only when some_error==true
somethingelse(); //Will always be executed.

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

if (some_error)  err1 = "bad1"; errorno=3;

Конечно, в приведенном выше примере errno всегда будет равно 3 независимо от того, является ли some_error истиной или нет.

То же самое с для петель

for (i = 0; i < 10; i++)
    doSomething (i);

Таким образом, скобки отмечают, где это начинается и где это заканчивается. Неиспользование их означает, что оператор if, for, while,... будет влиять только на следующую строку.

Кроме того, фигурные скобки могут использоваться, чтобы отметить блок кода. Когда я пишу код на C++, я всегда отмечаю начало и конец вызова GL фигурными скобками.

glBegin(GL_TRIANGLES); // Drawing Using Triangles
{
    glVertex3f( 0.0f, 1.0f, 0.0f); // Top
    glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
    glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
}
glEnd();

Таким образом легче читать и распознавать пропущенные вызовы glEnd.

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

if($var) return true;

такой же как

if($var) {
  return true; 
}

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

if($var) {
 $var += 1;
 $var2 = $var;
 return $var2
}

Лично я перестал их использовать, когда следовала одна строка кода, потому что вы правы, это выглядит чище, особенно если все в одной строке, как в верхнем выражении. Кроме того, ваш код будет более управляемым, если вы сократите else if заявления и просто использовать return остановить функцию, если if терпит неудачу и просто продолжать идти к следующему if на истине. Это может стать очень грязным очень быстро с большим количеством else if заявления, и вы не используете переключатель. Если не считать личных предпочтений, то если следовать только одной строке кода, потерять скобки.

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

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

//This outputs "hello"
$test = 1;
if($test == 1)
    echo "hello";

//This outputs "howdy"
$test = 1;
if($test == 2)
    echo "hello";
    echo "howdy";

Независимо от того, окружаете ли вы однострочные операторы фигурными скобками, это вопрос личных предпочтений, а также может быть продиктовано документом в стиле кодирования, если вы работаете над совместным проектом. Лично я никогда не использую их для отдельных операторов и позволяю отступам в моем коде показывать, как организован код, но если вы видите мой второй пример выше, я уже видел такой случай, когда появляются ошибки. Кодер создает условие с помощью одна строка, которая будет выполнена на основе этого условия. Затем входит другой кодер и добавляет вторую строку, но забывает добавить фигурные скобки. Таким образом, с этой точки зрения вы могли бы сказать, чтобы всегда использовать их. Это сильно зависит от ваших индивидуальных обстоятельств.

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