VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi (Теория).
Процедуры и функции
:
Logo

Сегодня нам предстоит поговорить о процедурах и функциях. Ко мне иногда приходят письма, в которых просят исправить ошибку в их коде. Иногда бывает, что ошибки нет, просто некоторые не до конца понимают разницу между процедурами и функциями. Вот я и решил рассказать тебе эту разницу.

Процедуры и функции - это некий участок кода, который выделен в отдельный блок. Простая процедура выглядит так:

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.

Вот кажется и всё, что касается процедур и функций.


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©