Логические типы, конструкции и компоненты
Операторские скобки BEGIN…END
Логический оператор IF, как и многие другие операторы, которые нам еще предстоит изучить, выполняет только одно действие. Взгляните на следующий код:
if a then ShowMessage('Действие №1'); ShowMessage('Действие №2'); ShowMessage('Действие №3');
В этом примере сообщение "Действие №1" выйдет только в том случае, если a = True. Остальные сообщения выйдут в любом случае, так как они к оператору IF уже не относятся, а выполняются как самостоятельные операторы. Однако что делать, если в рамках конструкции IF нам нужно выполнить не один оператор, а целый блок кода? В таком случае, этот блок помещают в операторские скобки begin…end, в результате чего блок операторов выполняется, как единый оператор. Изменим код:
procedure TfMain.Button1Click(Sender: TObject); var a: boolean; begin if a then begin ShowMessage('Действие №1'); ShowMessage('Действие №2'); ShowMessage('Действие №3'); end; //конец if end;
В данном примере все три сообщения заключены в скобки begin…end и выполняются, как один оператор. Значит, они все будут выведены, только если a = True, иначе не будет выведено ни одно сообщение.
Здесь следует сказать пару слов о стиле программирования. Единых стандартов тут нет, есть только рекомендации.
Во-первых, код должен быть удобочитаем. Сравните:
if a then ShowMessage('Действие №1') else ShowMessage('Действие №2');
Синтаксис здесь правильный, компилятор ошибок не найдет. И код этот будет выполнен верно, однако как же его сложно читать! Все части конструкции IF сливаются в одну строку, сразу и не разберешь, что тут к чему, а ведь конструкция еще очень простая! Что, если бы мы применяли несколько операций AND или OR, да еще с множеством операндов? Совсем иначе смотрится такой код:
if a then ShowMessage('Действие №1') else ShowMessage('Действие №2');
Здесь конструкция разбита на несколько небольших логических частей, каждой части отведена отдельная строка. Код стал явно более понятным, как говорят, более удобочитаемым. Однако его можно еще улучшить, если сдвинуть вложенные операторы вправо на 2-3 пробела, чтобы показать зависимости:
if a then ShowMessage('Действие №1') else ShowMessage('Действие №2');
Хороший программист именно так и оформляет свой код. Тут сразу видно, что от чего зависит, конструкция становится понятней.
Во-вторых, если вы применяете операторские скобки, то в учебной литературе вы можете встретить два способа оформления кода. Такой:
if a then begin ShowMessage('Действие №1'); ShowMessage('Действие №2'); ShowMessage('Действие №3'); end; //конец if
и такой:
if a then begin ShowMessage('Действие №1'); ShowMessage('Действие №2'); ShowMessage('Действие №3'); end; //конец if
Оба этих способа считаются классическими, оба хорошо смотрятся, какой из них применять - ваш выбор. Лично я не люблю переносить BEGIN на отдельную строку (разве что строка получается слишком длинной), поэтому предпочитаю первый способ. Вы, если захотите, можете выбрать и второй вариант, он тоже правильный.