next up previous contents
След.: Операторы синхронизации Выше: Операторы управления ходом программы Пред.: Операторы остановки   Содержание


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

В языке остался оператор безусловного перехода (прыжка)

GO TO метка

Пробел между двумя словами, составляющими оператор, может быть опущен. Метка строки, на которую осуществляется переход, должна существовать. В теории структурного програмирования доказывается, что любой алгоритм может быть реализован без переходов -- с использованием условного оператора, цикла и вызовов процедур. Прыжки нарушают требования структурности и чреваты усложнением логики программы. Тем не менее, существуют ситуации, в которых прыжки могут быть уместны. Например, выход из вложенных циклов в случае маловероятного события. Можно выставлять флаг в случае наступления события и проверять этот флаг на каждой итерации каждого цикла, но число проверок экспоненциально растет с увеличением глубины вложенности, что в случае редкости события сильно снижает эффективность без каких-либо выгод. В этом случае прыжок значительно экономичнее. Однако в современном фортране есть возможность прервать любой цикл по его имени (и даже любую конструкцию) с помощью оператора EXIT без нарушения структурности, что существенно лучше прыжка. Еще одним случаем уместности прыжка являются переходы из различных точек процедуры к единственной точке выхода. С точки зрения структурного программирования следует выходить из процедуры с помощью оператора RETURN там, где это необходимо. Однако в случае многочисленных точек выхода и сложной логики процедуры ее трудно отлаживать. В этом случае прыжки в конец процедуры облегчают отладку: можно разместить диагностический вывод, гарантированно срабатывающий перед выходом из процедуры. Третий случай -- это прыжок с целью пропуска участка кода. Правильнее заключать пропускаемый код в условный оператор с отладочным флагом или использовать условную компиляцию, но прыжок позволяет включать и выключать участок кода, изменяя лишь одну строку, что иногда немаловажно. Наконец, оператор прыжка весьма быстрый, поэтому в оптимизируемых по быстродействию алгоритмах иногда прибегают к нему.



Ilya A. Chernov 2012-12-19
X