Блоки - фигурные скобки / нет фигурных скобок?
Когда я начал разрабатывать, я следовал учебникам, которые всегда использовали {}
(фигурные скобки), чтобы заключить блоки. Однако, когда я начал смотреть на код других людей (например, классы на 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";
Независимо от того, окружаете ли вы однострочные операторы фигурными скобками, это вопрос личных предпочтений, а также может быть продиктовано документом в стиле кодирования, если вы работаете над совместным проектом. Лично я никогда не использую их для отдельных операторов и позволяю отступам в моем коде показывать, как организован код, но если вы видите мой второй пример выше, я уже видел такой случай, когда появляются ошибки. Кодер создает условие с помощью одна строка, которая будет выполнена на основе этого условия. Затем входит другой кодер и добавляет вторую строку, но забывает добавить фигурные скобки. Таким образом, с этой точки зрения вы могли бы сказать, чтобы всегда использовать их. Это сильно зависит от ваших индивидуальных обстоятельств.