Любая конструкция if может быть записана с фигурными скобками или без них. К примеру:
bool j = true;
if(j==true)
MessageBox.Show("That's true")
Или же так:
bool j = true;
if(j==true)
{
MessageBox.Show("That's true")
}
Разговор идет только конструкции if с единственным действием.
Отсюда несколько вопросов:
Игнорирует ли компилятор эти скобки?
Если нет, обращает ли внимание программа на них?
Оказывают ли влияние эти скобки на быстродействие программы (хоть самую незначительную)?
Ответ
Если обратиться к спецификации
Для if statement
if_statement:
| 'if' '(' boolean_expression ')' embedded_statement
| 'if' '(' boolean_expression ')' embedded_statement 'else' embedded_statement
;
Для циклов. например while:
while_statement:
| 'while' '(' boolean_expression ')' embedded_statement
;
Как можно заметить на уровне спецификации никаких скобочек нет.
В свою очередь embedded_statement раскрывается так:
embedded_statement:
| block
| empty_statement
| expression_statement
| selection_statement
| iteration_statement
| jump_statement
| try_statement
| checked_statement
| unchecked_statement
| lock_statement
| using_statement
| yield_statement
| embedded_statement_unsafe
;
И скобочки в данном случае являются частью block
block:
| '{' statement_list? '}'
;
Таким образом, можно сказать, что:
Компилятор скобки не игнорирует, так как они являются частью синтаксической конструкции
сама программа на них не может обращать внимания, но отличие в использовании все-таки есть. Например: внутри блока можно определять переменные, без скобок - нет.
Так как это чисто синтаксическая конструкция на быстродействие скобки никакого влияния не оказывают.
Комментариев нет:
Отправить комментарий