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

Когда я начал развиваться, я следил за учебниками, которые всегда использовали {} (фигурные скобки), чтобы заключать блоки. Однако, когда я начал изучать код других людей (например, в классах 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!';
}

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

Я спрашиваю:

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

b) существуют ли какие-либо рекомендации, если вы не используете {}?

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

Ответы

Ответ 1

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

if(something)
  do something else

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

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

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

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

Вставьте код {} в свой код.

Ответ 2

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

Ответ 3

В основном это зависит от стиля, к которому вы привыкли. 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,....

Кроме того, фигурные скобки можно использовать для обозначения блока кода. Когда я код на С++, я всегда отмечаю начало и конец вызова 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.

Ответ 4

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

if($var) return true;

то же, что и

if($var) {
  return true; 
}

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

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

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

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

Ответ 5

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

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

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

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