Они организуются командами переходов.
Переходы, как и циклы, могут быть условными и безусловными. Безусловный переход (в многих языках это GOTO, иногда JMP, от слова jump) тупо отправляет выполнение программы на новое место. Независимо ни от чего. Надо сказать, что во многих современных языках эта команда отсутствует и вообще среди программистов её использование, даже если она формально есть, считается дурным тоном.
Условные переходы проверяют условие, когда решают, переходить ли куда-то ил если переходить - куда именно. Самым простым случаем может быть команда IF, которая проверяет логическое условие (истинно или ложно то, что стоит под хнаком оператора IF). В Фортране был ещё один оператор IF - арифметический, он проверял знак числа и у него было три ветвления, а не два: на отрицательное значение числа, на нулевое, и на положительное.
Логический IF (извините, я опять воспользуюсь операторами Модулы-2...) проверяет условие и выполняет или одну последовательность инструкций, или, если заданно (оператором ELSE), другую. Например, IF a<0 THEN a:=-a END. Это простейший пример вычисления абсолютной величины числа "а". Если условие соблюдается (а - отрицательное число), то выполняются команды, следующие за IF (до закрывающей скобки END). Можно и явно указать те дейсвия, которые выполняются при несоблюдении условия, для этого служит оператор ELSE:
IF m<0 THEN a:=-m ELSE a:=m END. Тут абсолютная величина числа "а" присваивается переменной "m".
Часто оператор IF дополняется "вложенным" оператором ELSIF. Это удобно, если у нас не два, а несколько возможных вариантов. Например, надо определённым образом среагировать на какие-то буквы, скажем, на буквы А, В, С:
IF ch=A THEN (*тут у нас последовательность команд - реакция на букву А*)
ELSIF ch=B THEN (*реакция на букву В*)
ELSIF ch=C THEN (*реакция на букву С*)
ELSE (*реакция на любую другую букву*)
END
Аналогом вот такого развесистого, многовариантного оператора перехода является оператор CASE (в языках С он называется switch). Тут рассматривается не одно условие, а много разных, и каждому условию ставится своя последовательность команд. К примеру, тот же пример анализа букв можно написать через оператор CASE вот так:
CASE ch OF
A: (*реакция на букву А*) |
B: (*реакция на букву В*) |
C: (*реакция на букву С*)
ELSE (*чё делать, если ни одно условие не встретилось*)
END
Символ | служит закрывающей скобкой каждого варианта перебора.
Операторы типа CASE (switch и т. п.) очень удобны для синтаксического разбора введённых с клавиатуры команд (это называется парсингом), когда такие команды должны соответствовать ограниченному набору стандартных идентификаторов.
Добавить комментарий