Оператор безусловного перехода

Для передачи управления на любой помеченный оператор программы в Perl предусмотрен оператор безусловного перехода goto, однако разработчики языка настоятельно рекомендуют не использовать его, так как практически все необходимые переходы можно реализовать структурированными командами last, next и redo. Если этого не удается сделать, то следует еще раз продумать реализацию алгоритма, так как, скорее всего, не до конца продумана структура управляющих конструкций, реализующих ваш алгоритм. Хотя справедливости ради следует заметить, что в редких, ну очень редких случаях без оператора goto не обойтись. Именно в расчете на подобные ситуации практически в любом языке программирования можно обнаружить оператор безусловного перехода. Не является исключением и язык Perl. Более того, в нем есть три формы этого оператора:
goto МЕТКА;
goto ВЫРАЖЕНИЕ; 
goto &ПОДПРОГРАММА;
Первая форма goto МЕТКА передает управление на оператор с меткой МЕТКА, который может быть расположен в любом месте программы, за исключением конструкций, требующих определенных инициирующих действий перед их выполнением, например цикла foreach и определения подпрограммы sub.
ПРИМЕЧАНИЕ. Компилятор Perl не генерирует никаких ошибок, если в операторе goto задана несуществующая метка или если он передает управление в конструкцию foreach или sub. Все ошибки, связанные с этим оператором, возникают во время выполнения программы.
Во второй форме оператора безусловного перехода goto ВЫРАЖЕНИЕ возвращаемым значением выражения должна быть метка, на которую и будет передано управление в программе. Эта форма оператора goto является аналогом вычисляемого goto языка FORTRAN:
@label = ("OUT", "IN"); 
goto $label[1];
Последняя форма оператора goto &ПОДПРОГРАММА обладает магическим свойством, как отмечают авторы языка. Она подставляет вызов указанной в операторе подпрограммы для выполняемой в данной момент подпрограммы. Эта процедура осуществляется подпрограммами AUTOLOAD( ), которые загружают одну подпрограмму, скрывая затем, что на самом деле сначала была вызвана другая подпрограмма.
Отметим еще раз, что в программах следует избегать оператора goto, так как он делает логику программы более сложной и запутанной. Намного лучше использовать структурированные команды управления потоком вычислений next, last и redo. Если в процессе программирования выяснится, что не обойтись без оператора безусловного перехода, то это будет означать только одно: на этапе проектирования программы она была недостаточно хорошо структурирована. Вернитесь снова к этапу проектирования и постарайтесь разработать структуру программы таким образом, чтобы можно было обойтись без оператора goto.

Следующая страница Содержание главы


Реклама