- •2 Основы визуального программирования
- •Окно проектировщика формы
- •Окно редактора кодов
- •4 Структура программ Delphi
- •Структура проекта
- •5 Алфавит
- •6.3. Константы
- •6 Переменные и их типы
- •8 Процедуры и функции Процедуры
- •7 Строки и комментарии
- •Функции
- •10 События События в Delphi
- •11 Строковый тип данных
- •12 Символьные типы данных
- •13 Конструкция if
- •14 Цикл for
- •15 Свойства формы
- •Свойства формы
- •16 Свойства кнопки батон
- •17 Инструкция множественного выбора case
- •18 Инструкция (цикл) while
- •19 Компонент панель
- •20 К омпоненты GroupBox и CheckBox
- •21 Компонент RadioGroup
- •22 Свойства Enabled и Visiblе
- •23 Компоненты использующие для создания главного меню
- •24 Компоненты использующие для создания всплывающего меню Всплывающее меню
- •25 Массивы одномерные и многомерные
- •26 Не визуальные компоненты делфи
- •27 Оператор цикла repeat...Until Форма About средствами Delphi
7 Строки и комментарии
8 Процедуры и функции Процедуры
Итак, начнем исследование подпрограммы с процедур. Как уже было отмечено, процедуру надо описать. Описание процедуры состоит из заголовка и тела процедуры.
Заголовок состоит из ключевого слова procedure, за которым следует имя процедуры и, при необходимости, список параметров, заключенных в круглые скобки:
procedure <Имя> [(параметры)];
Вслед за заголовком может следовать блок объявления локальных меток, типов и переменных. Локальными они называются потому, что предназначены исключительно для этой процедуры.
ПРИМЕЧАНИЕ Вопросы локальных и глобальных переменных, и вообще видимости в программах, будет рассмотрен позже в этой главе.
После заголовочной части следует тело процедуры, заключаемое в begin и end. Таким образом, исходный код процедуры может выглядеть примерно таким образом:
procedure TriplePrint(str: string); var i: integer; begin for i := 1 to 3 do begin writeln('"'+str+'"'); end; // конец цикла for end; // конец процедуры TriplePrint
Здесь мы определили процедуру TriplePrint, которая будет трижды выводить переданную ей в качестве аргумента строку, заключенную в двойные кавычки. Как видно, данная процедура имеет все составные части: ключевое слово procedure, имя, список параметров (в данном случае он всего один - строковая переменная str), блок объявления собственных переменных (целочисленная переменная i), и собственное тело, состоящее из оператора цикла for.
Для использования данной процедуры в любом месте программы достаточно написать инструкцию вызова процедуры, состоящую из имени процедуры и списка аргументов, например:
TriplePrint('Hello!!!');
Отметим так же, что рассмотренная нами процедура сама содержит вызов другой процедуры - writeln. Процедуры могут быть встроенными. Иначе говоря, объявление одной процедуры можно помещать в заголовочную часть другой. Например, наша процедура TriplePrint может иметь вспомогательную процедуру, которая будет "подготавливать" строку к выводу. Для этого перед объявлением переменной i, разместим объявление еще одной процедуры. Назовем ее PrepareStr:
procedure PrepareStr; begin str := '"'+str+'"'; end;
Отметим, что переменная str, хотя и не передается этой процедуре в качестве параметра, тем не менее может в ней использоваться, поскольку данная процедура является составной частью процедуры TriplePrint, внутри которой данная переменная доступна для использования.
Таким образом, мы получаем две процедуры, одна из которых (TriplePrint) может использоваться во всей программе, а другая (PrepareStr) - только внутри процедуры TriplePrint. Чтобы преимущество использования процедур было очевидно, рассмотрим их на примере программы, которая будет использовать ее неоднократно, для чего обратимся к листингу 6.1 (см. так же пример в Demo\Part1\Procs).
Листинг 6.1. Использование процедур
program procs; {$APPTYPE CONSOLE} procedure TriplePrint(str: string); procedure PrepareStr; begin str := '"'+str+'"'; end; var i: integer; begin PrepareStr; for i := 1 to 3 do begin writeln(str); end; end; // конец процедуры TriplePrint begin // начало тела основной программы TriplePrint('Hello!!!'); // первый вызов TriplePrint TriplePrint('How are you???'); // 2-й вызов TriplePrint('Bye...'); // 3-й readln; end.
Очевидно, что если бы не процедура, то нам трижды пришлось бы писать цикл, свой для каждого слова. Таким образом, процедуры позволяют использовать единожды написанный код многократно, что существенно облегчает написание программ.
