Страницы

Поиск по вопросам

четверг, 4 октября 2018 г.

Употребление фигурных скобок компилятором

Любая конструкция 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? '}' ;
Таким образом, можно сказать, что:
Компилятор скобки не игнорирует, так как они являются частью синтаксической конструкции сама программа на них не может обращать внимания, но отличие в использовании все-таки есть. Например: внутри блока можно определять переменные, без скобок - нет. Так как это чисто синтаксическая конструкция на быстродействие скобки никакого влияния не оказывают.

Комментариев нет:

Отправить комментарий