Сергей Парижский - Delphi. Учимся на примерах
Конструкции ветвления
Конструкции ветвления осуществляют переход к одному из блоков программного кода на основании проверки некоторого условия. К ним относятся операторы if и case.
Оператор if
Оператор if имеет синтаксис двух видов:
if выражение then блок_кода;
if выражение then блок_кода else блок_кода;
Если выражение возвращает значение True, то выполняется блок кода, расположенный после ключевого слова then, в противном случае выполняется или программный код, расположенный после конструкции if-then (в случае отсутствия ветки else), или же код, расположенный после ключевого слова else.
Оператор case
Конструкция case используется для ветвления, когда может существовать более двух возможных результатов условного выражения. Она также имеет синтаксис двух видов:
case выражение of
значение1: блок_кода1;
…
значениеN: блок_кодаN;
end;
или
case выражение of
значение1: блок_кода1;
…
значениеN: блок_кодаN;
else блок_кода;
end;
Если результат выражения совпадает со значением1, то выполняется блок_кода1; если со значением2 — 6лок_кода2 и т.д. Если результат выражения не совпадает ни с одним значением, то выполняется блок кода в ветке else, а при ее отсутствии — код после ключевого слова end, завершающего конструкцию case.
Примечание
Результат выражения, который сопоставляется со значениями в ветках конструкции case, может быть только целочисленного или символьного типа.
Циклические конструкции
Для организации циклического выполнения программных блоков в языке Object Pascal используют циклические конструкции трех типов: for-do, while-do и repeat-until. Они отличаются характером начала и завершения цикла.
Конструкция for-do
Синтаксис конструкции for-do для цикла с увеличением значения счетчика:
for идентификатор_счетчика := начальное_значение to конечное_эначение do блок_кода;
Синтаксис конструкции for-do для цикла с уменьшением значения счетчика:
for идентификатор_счетчика := начальное_значение downto конечное_значение do блок_кода;
Выход из цикла for определяется достижениям некоторого значения специальной переменной, называемой счетчиком цикла. Цикл выполняется как минимум один раз.
Конструкция while-do
Синтаксис конструкции while-do:
while выражение do блок_кода;
Выход из цикла while-do происходит в том случае, если выражение, расположенное между ключевыми словами while и do, дает значение False. Цикл может не выполниться ни одного раза.
Конструкция repeat-until
Синтаксис конструкции repeat-until:
repeat блок_кода until выражение;
Выход из цикла repeat-until происходит в том случае, если выражение, расположенное после ключевого слова until, дает значение True.
Досрочный выход из циклов
Для досрочного выхода из циклов используются процедуры Break и Continue. Процедура Break прерывает цикл, а в результате вызова процедуры Continue пропускается блок кода, расположенный между ею и окончанием тела цикла, и выполняется следующая итерация.
Обработка исключений
Исключение (exception) — это результат выполнения некорректного оператора, что привело к возникновению ошибки. В языке Object Pascal для обработки исключений предназначена специальная конструкция:
try
//Операторы, которые могут привести к возникновению исключения
except
//Операторы, выполняемые в случае возникновения исключения
end;
В случае возникновения исключения в блоке операторов, расположенных между ключевыми словами try и except, управление передается блоку операторов после слова except, где можно определить реакцию на возникшую ошибку.
В частности, в блоке except можно обрабатывать исключения в зависимости от их типа с помощью конструкции
except
on Тип_исключения1 do Блок_операторов1;
on Тип_исключения2 do Блок_операторов2;
…
on Тип_исключенияN do Блок_операторовN;
end;
Типу исключения соответствует имя класса, производного от класса Exception. В отличие от других классов Delphi, имена классов исключений начинаются к латинской буквы "E". Перечислим некоторые из этих классов:
• EZeroDivide — деление на ноль;
• EAccessViolation — ошибка доступа к памяти;
• ERangeError — выход значения за границы допустимого диапазона;
• EStackOverflow — переполнение стека памяти из-за слишком больших переменных или чрезмерно большого количество рекурсивных вызовов процедур (вызов процедуры самой себя);
• EConvertError — ошибка преобразования (например, строки в число);
• EDatabaseError — ошибка при работе с базой данных;
• EOutOfMemory — переполнение памяти;
• EFCreateError — ошибка создания файла;
• EFilerError — ошибка чтения/записи при работе с файлом;
• EFOpenError — ошибка открытия файла;
• EIniFileException — ошибка при работе с INI-файлом;
• EInOutError — ошибка ввода-вывода.
Если тип исключения точно неизвестен, то для его обработки можно воспользоваться следующей конструкцией:
except
on E: Exception do Блок_операторов;
end;
При этом в блоке операторов после ключевого слова do можно обращаться к свойству E.Message, которое содержит строку с описанием ошибки.
Блок операторов finally
Существует еще одна конструкция, связанная с обработкой исключений:
try
//Операторы, которые могут привести к возникновению
//исключения
finally
//Операторы, которые выполняются при любых условиях
end;
Блок операторов после ключевого слова finally выполняется в любом случае, независимо от того, возникло исключение в блоке try или нет.