for идентификатор_счетчика := начальное_значение downto конечное_значение do блок_кода;
Выход из цикла for определяется достижениям некоторого значения специальной переменной, называемой счетчиком цикла. Цикл выполняется как минимум один раз.
Конструкция while-do
Синтаксис конструкции while-do:
while выражение do блок_кода;
Выход из цикла while-do происходит в том случае, если выражение, расположенное между ключевыми словами while и do, дает значение False. Цикл может не выполниться ни одного раза.
Конструкция repeat-until
Синтаксис конструкции repeat-unticlass="underline"
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 или нет.