| Сегодня нам предстоит поговорить о процедурах и функциях. Ко мне иногда приходят письма, в которых просят исправить ошибку в их коде. Иногда бывает, что ошибки нет, просто некоторые не до конца понимают разницу между процедурами и функциями. Вот я и решил рассказать тебе эту разницу. Процедуры и функции - это некий участок кода, который выделен в отдельный блок. Простая процедура выглядит так: procedure Exampl; var i:Integer;//Объявление локальной переменной begin i:=10;//Присваиваю переменной значение end; Процедура называется Exampl. После слова vаr идёт объявление локальных переменных. Я объявляю одну переменную i типа integer (целое число). Это локальная переменная и её можно использовать только внутри этой процедуры. После выхода из неё, переменная уничтожается. Внутри блока begin ... end я присваиваю переменной значение 10. В принципе, ничего не происходит, потому что после присваивания числа процедура заканчивается и переменная i уничтожается. Для вызова процедуры нужно написать тольк Exampl Если процедура относится к объекту, то нужно написать в объявлении имя объекта, а после точки имя процедуры. Вот пример процедуры относящейся к объекту формы Form1: procedure Form1.Examp2; begin Exampl; //Вызываем процедуру Exampl написанную ранее. end; В этой процедуре Examp2 я вызываю написанную ранее Exampl. Все имена процедуры должны начинатся с латинских букв и могут заканчиватся цифрами. Нельзя использовать руские буквы и имена процедур не могут начинатся с цифр. Если процедура не относится к объекту, то есть ещё одно правило: она должна быть описана до использования. Например: procedure Examp2; begin Exampl; //Произойдёт ошибка, потому что сама процедура Exampl; описана ниже end; procedure Exampl; var i:Integer; begin i:=10; end; procedure Examp4; begin Exampl; //Здесь ошибки не будет, потому что Exampl; описан выше. end; Если процедура относится к объекту, то не имеет значения, где она написана и где её вызываете. Потому что объекты имеют область описания и она доступна компилятору: type TForm1 = class(TForm) procedure Exampl; procedure Examp2; procedure Examp3; procedure Examp4; end; По этому описанию компилятор узнаёт о существовании процедур, поэтому ты можешь их реализовывать в любом порядке, ошибок не будет. Мы уже знакомы с такими описаниями на практике, оно находится в начале любого модуля. Теперь разберёмся с функциями. Это те же процедуры, только умеют возвращать значения. Простейшая функция выглядит так: function Exampl:Integer; var i:Integer;//Объявление локальной переменной begin i:=10;//Присваиваю переменной значение Result:=i; // Возвращяю значение i end; Я объявил функцию, которая будет возвращать значение типа integer (целое число) function Exampl: Integer . Для возврата значения, нужно присвоить его к переменной Result. Для вызова функции нужно: procedure Form1.Examp2; var x:Integer; begin x:=Exampl; //Вызываем процедуру Exampl написанную ранее. end; В этом примере я присваиваю переменной x значение возвращаемое функцией Exampl. Всё остальные правила объявления функций такие же, как и у процедур. Теперь посмотрим, как можно передавать значения внутрь процедур: function Exampl(index:Integer):Integer; begin Result:=index/2; // Возвращяю переданное значение index // делённое на 2 end; После имени функции, в скобках указывается тип переменной, который можно передать внутрь функции или процедуры. В моём случае это переменная index типа Integer. Вызов моей функции будет такой: procedure Form1.Examp2; var x:Integer; begin x:=Exampl(20); //Вызываем процедуру Exampl написанную ранее. end; Я предаю в функцию Exampl значение 20, а она мне вернёт 20 делённое на 2, то есть 10. Вот кажется и всё, что касается процедур и функций.
|