IF
Выполняет один из нескольких альтернативных блоков команд.
Синтаксис
IF <лог. условие 1>
<команды>...
[ELSEIF<лог. условие 2>]
<команды>...
[ELSE]
<команды>...
END[IF]
Аргументы
<лог. условие> – логическое управляющее выражение. Если оно имеет значение «истина» (.Т.), то выполняются все последующие команды до ELSEIF, ELSE или ENDIF.
ELSEIF определяет команды, которые необходимо выполнить, если <лог. условие> дает при вычислении значение «истина» (.Т.) и все предшествующие условия IF или ELSEIF дают при вычислении значение «ложь» (.F.). Внутри управляющей структуры IF...ENDIF может быть любое количество операторов ELSEIF.
ELSE определяет команды, выполняемые если условия операторов IF и всех предыдущих ELSEIF дают при вычислении значения «ложь» (.F.).
Описание
Управляющая структура IF работает следующим образом. Управление передается командам, следующим за первым условием в IF или ELSEIF, которое при вычислении дает значение «истина»(.Т.). Выполнение продолжается до тех пор, пока не встретится следующий ELSEIF, ELSE или ENDIF, после чего управление передается команде, следующей сразу за ENDIF.
Если ни одно из условий при вычислении не дает значения «истина» (.Т.), то управление передается первой команде, следующей за оператором ELSE. Если ELSE отсутствует, то управление передается первой команде, следующей за ENDIF.
Структуры IF...ENDIF могут быть вложены друг в друга или в другие управляющие структуры. Однако необходимо следить, чтобы эти структуры были вложены правильно.
FOR
Выполняет блок команд заданное число раз.
Синтаксис
FOR <счетчик> := <начальное значение> ТО <конечное значение> [STEP <шаг>]
<команды>...
[EXIT]
<команды>...
[LOOP]
NEXT или END
Аргументы
<счетчик> – имя управляющей переменной (счетчика). Указанное имя <счетчик> должно быть объявлено ранее, как LOCAL, PRIVATE или PUBLIC переменная.
<начальное значение> – выражение, определяющее начальное значение, присваиваемое переменной <счетчик>
ТО <конечное значение> определяет конечное значение переменной <счетчик>. Если <шаг> отрицательный, <начальное значение> должно быть больше <конечное значение>, в противном случае <начальное значение> должно быть меньше <конечное значение>.
STEP <шаг> определяет значение приращения переменной <счетчик> перед каждой итерацией цикла. Значение выражения <шаг> может быть как положительным, так и отрицательным. Если предложение STEP опущено, переменная <счетчик> увеличивается на единицу перед каждой итерацией цикла.
EXIT безусловно передает управление из конструкций FOR...NEXT или DO WHILE на команду, расположенную непосредственно после оператора NEXT или ENDDO.
LOOP передает управление на ближайший оператор FOR или DO WHILE.
Описание
FOR...NEXT – это управляющая структура, выполняющая блок операторов заданное число раз. Управляющая структура выполняет блок операторов от начального значения переменной <счетчик> до границы, определенной аргументом <конечное значение>, проходя через область значений управляющей переменной с приращением, определенным в выражении <шаг>.
FOR-цикл повторяет блок команд до тех пор, пока значение переменной <счетчик> не станет больше, чем значение <конечное значение>, или пока не встретится оператор EXIT. Тогда управление передается на команду, расположенную за соответствующим оператором NEXT.
Если встречается оператор LOOP, управление передается на ближайший оператор DO WHILE или FOR.
Если <шаг> отрицательный, значение переменной <счетчик> уменьшается. Выполнение FOR-цикла в этом случае продолжается до тех пор, пока значение переменной <счетчик> не станет меньше, чем <конечное значение>. Это значит, что <конечное значение> должно быть меньше, чем <начальное значение> в начале работы FOR-цикла.
FOR...NEXT структуры, как и другие управляющие структуры, могут быть вложенными на любую глубину.
WHILE
Выполняет группу команд, пока условие сохраняет значение «истина» (.T.)
Синтаксис
[DO] WHILE <лог. условие >
<команды>...
[EXIT]
<команды>...
[LOOP]
<команды>...
END[DO]
Аргументы
<лог. условие> – логическое управляющее выражение для организации многократного выполнения группы операторов.
EXIT безусловно передает управление из тела цикла структур WHILE или FOR...NEXT на команду, находящуюся непосредственно за соответствующим оператором ENDDO или NEXT.
LOOP передает управление на первую команду ближайшей структуры WHILE или FOR.
Описание
WHILE...ENDDO – управляющая структура, выполняющая блок команд в цикле до тех пор, пока <лог. условие> сохраняет значение «истина» (.T.). При значении условия «истина» (.T.) управление передается на первую команду блока и его выполнение продолжается до тех пор, пока не встретится оператор EXIT, LOOP или ENDDO. ENDDO передает управление на оператор WHILE и процесс повторяется.
Если встретится оператор EXIT, управление будет передано на ближайшую команду за операторами ENDDO или NEXT.
Если встретится оператор LOOP, управление будет передано на ближайший оператор WHILE или FOR.
Если условие примет значение «ложь» (.F.), оператор WHILE передаст управление на команду, следующую непосредственно за соответствующим оператором ENDDO.
EXIT в основном служит для прекращения выполнения структуры DO WHILE, по условию, отличному от того, которое было указано в DO WHILE.
LOOP, в противоположность EXIT, используется для того, чтобы прервать выполнение блока команд DO WHILE, по внутреннему условию и передать управление непосредственно на оператор DO WHILE.
Разрешается использовать вложенные конструкции DO WHILE без ограничения. Единственное ограничение состоит в том, чтобы одна конструкция DO WHILE была полностью вложена в другую.
RETURN
Завершает выполнение процедуры, функции пользователя или программы.
Синтаксис
RETURN [<выражение>]
Аргументы
<выражение> – выражение любого типа, значение которого является возвращаемым значением функции пользователя.
Если функция пользователя завершает работу без выполнения оператора RETURN, то возвращается значение системной переменной RESULT, если ранее было выполнено RESULT:=..., иначе возвращается результат выполнения последней строки текущей процедуры или функции.
Описание
RETURN завершает выполнение процедуры, функции пользователя или программы, передавая управление в вызывающую ее процедуру или функцию пользователя. Если RETURN выполняется в процедуре высшего уровня, то управление передается в DELPHI. Все созданные PRIVATE переменные и LOCAL переменные, объявленные в текущей процедуре или функции пользователя, удаляются при передаче управления в вызывающую процедуру.
TRY ... FINALLY...END
Гарантированное выполнение завершающих действий
Синтаксис
TRY
... // Обработка (операция)
FINALLY
// завершающие действия
END
Описание
Конструкция TRY ... FINALLY...END используется, когда нужно быть уверенным, что специфическая часть операции будет завершена, даже, если во время обработки возникла ошибка выполнения.
Например, когда подпрограмма приобретает контроль над ресурсом, часто важно, чтобы ресурс был освобожден, независимо от того, как завершается подпрограмма.
Управление на блок FINALLY... END передается в случае:
– сразу после выполнения оператора, непосредственно предшествующего ключевому слову Finally. После выполнения всех завершающих действий программа продолжается дальше обычным образом.
– если между TRY...FINALLY встретился оператор, прерывающий последовательность выполнения программы и передающий управление за блок FINALLY...END (например: RETURN (выход из подпрограммы или функции), EXIT (выход из цикла)), то сначала выполняются все завершающие действия (строки между FINALLY...END), а затем выполняется передача управления.
– если возникла ошибка времени выполнения между TRY...FINALLY, то управление передается на ближайшую завершающую часть блока TRY.
После выполнения всех завершающих действий управление передается на следующий по уровню вложения блок TRY, до тех пор пока не встретится блок TRY...EXCEPT...END или не останется вложенных блоков TRY ... FINALLY...END.
Пример
Try
...
OpenKlsf('R01') // открытие справочника
....
Finally
CloseKlsf('R01') // гарантированное закрытие справочника
end
TRY ... EXCEPT...END
Обработка ошибок времени выполнения и других исключительных ситуаций
Синтаксис
TRY
... // Обработка (операция)
[ABORT]
EXCEPT
// Обработка исключительной ситуации
[RAISE] // Повторная генерация исключительной ситуации
END
Описание
Конструкция TRY ... EXCEPT...END применяется для перехвата исключительной ситуации (в том числе ошибки выполнения) с последующей возможной ее обработкой.
При возникновении ошибки времени выполнения возникает исключительная ситуация и управление передается на ближайшую завершающую часть блока TRY (EXCEPT...END или FINALLY...END).
При этом доступны две переменные строковые переменные:
_ERRTYPE – тип исключительной ситуации ( «Exception», «Abort»)
_ERRSTRING – текстовое описание исключительной ситуации
После обработки исключительной ситуации в блоке EXCEPT...END (если не встретился оператор RAISE) выполнение продолжается обычным образом со строки программы, следующей за блоком EXCEPT...END.
Если при обработке исключительной ситуации в блоке EXCEPT...END встретился оператор RAISE, то возникает новая исключительная ситуация, того же типа, что и предыдущая, при этом изменяется последовательность выполнения и управление передается на очередную ближайшую завершающую часть блока TRY (EXCEPT...END или FINALLY...END).
В том случае, если исключительная ситуации, вызванная ошибкой выполнения возникла вне блока TRY ... EXCEPT...END, то выводится сообщение об ошибке и выполнение программы прекращается.
Кроме ошибки времени выполнения исключительная ситуация может быть сгенерирована оператором ABORT. В этом случае порядок ее обработки аналогичен порядку обработки исключительной ситуации, вызванная ошибкой выполнения, за исключением того, что сообщение об ошибке не выводится.