Как использовать функции и процедуры в Delphi

Вы когда-нибудь писали один и тот же код снова и снова для выполнения какой-то общей задачи внутри обработчики событий? Да! Пришло время узнать о программах в рамках программы. Давайте назовем эти мини-программы подпрограммами.

Введение в подпрограммы

Подпрограммы являются важной частью любого язык программирования, иDelphi не исключение В Delphi обычно есть два типа подпрограмм: функция и процедура. Обычное различие между функцией и процедурой состоит в том, что функция может возвращать значение, а процедура обычно не делает этого. Функция обычно вызывается как часть выражения.

Взгляните на следующие примеры:

процедура Скажи привет(Const sWhat:строка); начать
ShowMessage ('Hello' + sWhat); конец; функция Лет(Const BirthYear: целое число): целое число; вар
Год, месяц, день: слово; начать
DecodeDate (дата, год, месяц, день); Результат: = Год - Год рождения; конец; 

После того, как подпрограммы определены, мы можем вызвать их один или несколько раз:

процедура TForm1.Button1Click (Отправитель: TObject); 
instagram viewer
начать 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»); конец;
instagram story viewer