Лекция: Прерывание итераций операторами EXIT и RETURN

Оператор EXIT, помещенный в теле циклов WHILE, REPEAT и FOR, приводит к немедленному окончанию цикла. Хороший стиль программирования призывает избегать такого приема, но иногда он весьма удобен. Рассмотрим, например, поиск элемента массива с определенным значением (х). Проще всего организовать линейный перебор при помощи цикла FOR:

bObtained:= FALSE;

FOR cN := 1 TO Maxlndex DO

IF x = aX[cN] THEN

Index:= cN;

bObtained := TRUE;

EXIT;

END_IF

END_FOR

IF bObtained THEN (*элемент найден, его индекс — Index*)

Для вложенного цикла оператор EXIT завершает только «свой» цикл, внешний цикл будет продолжать работу. Например:

FOR У := О ТО 9 DO

FOR x := О ТО 99 DO (* обрабатываем строку массива Агг[у][х]*)

>

IF… THEN EXIT; (*'хвост' строки обрабатывать не

надо, переходим к следующей*)

END_FOR

END_FOR

При необходимости завершения внешнего цикла по условию, возникшему во вложенном цикле, можно использовать пару синхронизированных операторов EXIT:

bBreakY := FALSE;

FOR у := О ТО 9 DO

FOR x := О ТО 99 DO

;

IF… THEN bBreakY := TRUE; EXIT; («прервать обработку*)

END_FOR

IF bBreakY THEN EXIT;

END_FOR

Оператор RETURN осуществляет немедленный возврат из POU. Это единственный способ прервать вложенные итерации без введения дополнительных проверок условий. Оператор RETURN выполняется очень быстро, фактически это одна машинная команда процессора. Но не стоит им злоупотреблять. Поскольку в тексте компонента, имеющего, например, 50 выходов, разобраться весьма не просто.

Иногда бывает удобно создать безусловный цикл, а условия выхода формировать в теле цикла с использованием EXIT. Например, могут потребоваться несколько равновероятных, но не­взаимосвязанных условий выхода из цикла. Создать безусловный (бесконечный) цикл в ST проще всего так: WHILE TRUE DO...

 

еще рефераты
Еще работы по информатике