Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 68

, что означает переход на конец текущего блока BEGIN...END (на рисунке это еще и выход из программы). Перед BEGIN метки не ставятся. Следует избегать переходов (и расстановки меток), передающих управление внутрь составных операторов циклов, да и вообще переходов в составные операторы, вложенные в тот, где выполняется оператор Goto. Другое дело — выход из вложенных операторов во внешние. В таких случаях применение Goto — достаточно безопасный и максимально эффективный способ вернуть управление внешнему оператору.


Область действия операторов перехода и связанных с ними меток строго локализована. Метки, описанные вне процедур или функций, имеют своей областью действий только основной блок программы. Но метки, описанные внутри определения процедур или функций, имеют смысл только внутри них, поэтому запрещены переходы по Goto между процедурами и между процедурами и основным блоком.

- 105 -

При практическом программировании на Паскале необходимость в использовании оператора Goto возникает не часто (если, конечно, не писать стилем Фортрана или Бейсика на Паскале). Иногда один переход позволяет избежать очень широких циклов, но злоупотребление переходами не будет признаком высокой культуры программирования.

6.8. Операторы Exit и Halt


Турбо Паскаль обладает средствами безусловного выхода из программных блоков (процедур, функций, основного блока программы). Это очень удобно, так как позволяет завершить программу или процедуру без предварительных переходов по меткам. К таким операторам завершения относятся вызовы системных процедур Exit и Halt.

Вызов Exit завершает работу своего программного блока. Если выполняется Exit в процедуре, то выполнение ее завершится и ход программы вернется к следующему за вызовом этой процедуры оператору. При этом процедура вернет значения, которые успели вычислиться к моменту выполнения Exit (если она должна их возвратить). Сама программа не прервется. Но если Exit выполняется в основном блоке программы, выход из него будет эквивалентен нормальному ее завершению. Процедура Exit — в некотором роде избыточная. Ее действие полностью эквивалентно безусловному переходу (Goto) на метку, стоящую перед последним словом END содержащей ее процедуры, функции или основного блока. Но использование Exit позволяет избежать лишней возни с метками и улучшает читаемость программ. Таким образом, Exit — это средство выхода из программного блока, а не из составного оператора, например цикла FOR. Вызов Exit может быть в трижды вложенном цикле процедуры, но его действие все равно будет относится к процедуре, как к программному блоку.