Вы когда-нибудь писали один и тот же код снова и снова для выполнения какой-то общей задачи внутри обработчики событий? Да! Пришло время узнать о программах в рамках программы. Давайте назовем эти мини-программы подпрограммами.
Введение в подпрограммы
Подпрограммы являются важной частью любого язык программирования, иDelphi не исключение В Delphi обычно есть два типа подпрограмм: функция и процедура. Обычное различие между функцией и процедурой состоит в том, что функция может возвращать значение, а процедура обычно не делает этого. Функция обычно вызывается как часть выражения.
Взгляните на следующие примеры:
процедура Скажи привет(Const sWhat:строка); начать
ShowMessage ('Hello' + sWhat); конец; функция Лет(Const BirthYear: целое число): целое число; вар
Год, месяц, день: слово; начать
DecodeDate (дата, год, месяц, день); Результат: = Год - Год рождения; конец;
После того, как подпрограммы определены, мы можем вызвать их один или несколько раз:
процедура TForm1.Button1Click (Отправитель: TObject);
начать
SayHello («Пользователь Delphi»); конец; процедура TForm1.Button2Click (Отправитель: TObject); начать
SayHello («Зарко Гаджич»); ShowMessage («Вы есть» + IntToStr (YearsOld (1973)) + «лет!»); конец;
Функции и процедуры
Как мы видим, и функции, и процедуры действуют как мини-программы. В частности, они могут иметь свои собственные типы, константы и объявления переменных внутри них.
Присмотритесь к (разному) функции SomeCalc:
функция SomeCalc. (Const SStR: строка; Const iYear, iMonth: целое число; вар iDay: целое число): логическое; начать...конец;
Каждая процедура или функция начинается с заголовок который идентифицирует процедуру или функцию и перечисляет параметры рутина использует, если таковые имеются. Параметры указаны в скобках. Каждый параметр имеет идентифицирующее имя и обычно имеет тип. Точка с запятой отделяет параметры в списке параметров друг от друга.
sStr, iYear и iMonth называются постоянные параметры. Постоянные параметры не могут быть изменены функцией (или процедурой). IDay передается как параметр varи мы можем внести в него изменения внутри подпрограммы.
Функции, так как они возвращают значения, должны иметь тип возврата объявлено в конце заголовка. Возвращаемое значение функции задается (окончательным) присваиванием ее имени. Поскольку каждая функция неявно имеет локальную переменную Result того же типа, что и возвращаемое значение функции, назначение Result имеет тот же эффект, что и присвоение имени функции.
Позиционирование и вызов подпрограмм
Подпрограммы всегда размещаются в разделе реализации модуля. Такие подпрограммы могут вызываться (использоваться) обработчиком событий или подпрограммой в том же модуле, который определен после него.
Примечание: предложение использования единицы говорит вам, какие единицы она может вызвать. Если мы хотим, чтобы определенная подпрограмма в Unit1 могла использоваться обработчиками событий или подпрограммами в другом модуле (скажем, Unit2), мы должны:
- Добавьте Unit1 к предложению использования Unit2
- Поместите копию заголовка подпрограммы в раздел интерфейса Unit1.
Это означает, что подпрограммы, заголовки которых приведены в разделе интерфейса, глобальный по объему.
Когда мы вызываем функцию (или процедуру) внутри своего собственного модуля, мы используем ее имя с любым параметры необходимы. С другой стороны, если мы вызываем глобальную подпрограмму (определенную в каком-то другом модуле, например, MyUnit), мы используем имя модуля, за которым следует точка.
... // Процедура SayHello определена внутри этого модуля
SayHello («Пользователь Delphi»); // Функция YearsOld определена внутри блока MyUnit
Пустышка: = MyUnit. Years Old (1973);...
Примечание: функции или процедуры могут иметь свои собственные подпрограммы, встроенные в них. Встроенная подпрограмма является локальной для подпрограммы контейнера и не может использоваться другими частями программы. Что-то вроде:
процедура TForm1.Button1Click (Отправитель: TObject); функция Маленький(Const SStR:строка): Логическое значение; начать// IsSmall возвращает True, если sStr в нижнем регистре, False в противном случае
Результат: = LowerCase (sStr) = sStr; конец; начать// IsSmall можно использовать только внутри события Button1 OnClickесли IsSmall (Edit1.Text) тогда
ShowMessage ('Все маленькие заглавные буквы в Edit1.Text')
еще
ShowMessage («Не все маленькие заглавные буквы в Edit1.Text»); конец;