Delphi для начинающих. Урок 11. Процедуры и функции

AngelOfLove

Exploit Developer
Joined
Feb 21, 2017
Messages
452
Reaction score
76
В этом уроке я расскажу вам об устройстве и применении процедур и функций в языке программирования Pascal/Delphi.

Процедуры — это конструкции программного кода, которые позволяют создавать в программном коде некоторые подпрограммы, которые выполняют определенные операции независимо от остального программного кода. Разберем несложный пример:

1 procedure shownumbers(n:integer);
2 var i:integer;
3 begin
4 for i:=1 to n do
5 showmessage(inttostr(i));
6 end;
7 procedure showsimplemessages;
8 begin
9 showmessage('This is a simple message 1!');
10 showmessage('This is a simple message 2!');
11 end;
12 procedure TForm1.OnCreate(Sender:TObject);
13 begin
14 shownumbers(5);
15 showsimplemessages;
16 end;

Пока не будем изучать синтаксис, сначала разберемся с принципом работы процедур. Как вы уже наверное заметили, все события (например тот же OnCreate) представлены процедурами. Сначала изучим содержимое обработчика события создания формы Form1 (или точнее уже можно говорить — содержимое процедуры «procedure TForm1.OnCreate(Sender:TObject)»). Внутри этой процедуры мы видим «shownumbers(5);» и «showsimplemessages;» — это и есть вызов процедур, находящихся выше чем «procedure TForm1.OnCreate(Sender:TObject)». Как вы уже наверняка поняли, для того чтобы вызвать существующую процедуру, необходимо сначала указать ее название, а затем в скобках перечислить ее параметры. Если параметр один, то достаточно просто указать его значение. Также, процедуры могут не иметь параметров. В таком случае скобки можно опустить. Указывать сами параметры нужно в соответствующем им типе. Например строковые переменные «string» нужно указывать в кавычках ‘ ‘.

Теперь разберем синтаксис самой процедуры. В самом начале процедуры идет ключевое слово «procedure». Затем указывается имя процедуры, а после имени указываются параметры в скобках. Указываются они перечислением через «точку с запятой». Несколько однотипных переменных подряд можно указывать через запятую. На словах это понять достаточно трудно, поэтому приведу пример:

1 procedure example(a,b,c:integer; d:string; e:real; x1,y1:string);

Затем, после объявления параметров процедуры, указывается программный код процедуры между ключевыми словами «begin» и «end» также, как это показано на первом примере. Перед «begin» можно также указать локальные переменные, создав новый раздел var. Эти переменные могут использоваться и обрабатываться только внутри самой процедурой, внутри которой они объявлены. Также внутри программного кода процедуры можно использовать параметры процедуры как обычные переменные указанного в процедуре типа. Только во время вызова процедуры, всем параметрам процедуры будет уже переданы соответствующие значения, указанные в вызове процедуры.



Очень важно при написании кода учитывать то, что сама процедура должна находиться выше в коде, чем то место где происходит ее вызов! Иначе может произойти ошибка, связанная с тем, что процедура попросту не будет найдена.




Любая процедура может вызвать любую другую процедуру, но только если вызываемая процедура стоит выше вызывающей ее процедуры.




Внутри процедур можно обращаться к глобальным переменным и изменять их значения.


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

1 function calc(a,b,c:integer; d:string): integer;
2 begin
3 result:=length(d);
4 inc(a,5);
5 dec(b,2);
6 inc(result, a+b-c);
7 end;
8 procedure TForm1.OnCreate(Sender:TObject);
9 var a:integer;
10 begin
11 a:=calc(1,2,3,'testing');
12 showmessage('Результат функции равен '+inttostr(a));
13 end;

Кстати, в этом примере мы также разберем две новые процедуры и одну новую для вас функцию, уже предусмотренные в Pascal/Delphi. Эти процедуры — «inc(a;integer;b:integer)» и «dec(a:integer;b:integer)». Первая называется инкрементом, и увеличивает целочисленное число «a» на «б» единиц. Вторая процедура называется декрементом, и делает совершенно обратную операцию инкременту, а именно уменьшает целочисленное число «a» на «b» единиц. Если переменной «b» не указать значение, то вместо числа «b» автоматически будет использоваться единица. Таким образом «inc(a);» — тоже самое что и «inc(a,1);». В качестве «b» могут выступать и отрицательные числа, что приведет к инверсии операции, т.е. «inc(a,-3);» — тоже самое что и «dec(a,3);». Процедуры инкремента и декремента использовать несколько удобнее и работают они относительно быстрее чем присвоение «a:=a+1;».



Функция «length(s:string):integer» подсчитывает количество символов в строке s и возвращает результат в виде целочисленной переменной.


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

Во всех функциях присутствует зарезервированная переменная под названием «result», которая хранит в себе результат функции, т.е. ее значение. Внутри программного кода функции нужно произвести присвоение переменной «result» значения, которое должна возвращать функция. Тип переменной «result» указывается после перечисления параметров (после закрывающей скобки и двоеточия), как это показано на примере. Внутри программного кода функции мы также как и в процедуре можем производить любые операции над параметрами, а также и над переменной «result». Также как и в процедуре, в функции необязательны параметры. Тогда она может выглядеть так:

1 function example: string;
2 begin
3 result:='simple function';
4 end;

Вызов функции осуществляется через присвоение, так как это показано в примере. Параметры функции указываются точно так же как и у процедуры.
 

Ghost1982

Member
Joined
Mar 18, 2009
Messages
6
Reaction score
0
Haven't checked out the new Delphi course yet, but I'm planning to dive in this weekend. Anybody finished the first 11 lessons and got some insights on how it's going?
 

Fedot_Pulemet

New member
Joined
Feb 28, 2018
Messages
3
Reaction score
0
I'm pretty new to Delphi myself, but from what I understand, procedures and functions are pretty similar in that they can both return values, but procedures can't be executed like a function in code. If someone is new to Delphi, it might be a bit confusing at first, but it's worth the learning curve. Has anyone got a good resource for explaining the differences?
 

dueshin

New member
Joined
May 4, 2006
Messages
4
Reaction score
0
I'm not super familiar with Delphi, but from what I've gathered, I think procedures and functions are pretty similar to classes and methods in OOP languages. Procedures just tend to return no value or results I believe, whereas functions can return something. Would be happy if someone more knowledgeable could chime in and clarify!
 

sreecharana

New member
Joined
Apr 1, 2015
Messages
3
Reaction score
0
I'm a bit rusty with Delphi, but from what I recall, functions in Delphi are essentially methods that can be used across multiple units and classes. They're super useful for reusing code and keeping your projects organized. Anybody have experience with implementing functions in Delphi?
 

yubor

New member
Joined
Jun 20, 2011
Messages
3
Reaction score
0
I think you might be referring to the Delphi programming language, right? For those who are new to Delphi, this video series seems like a great resource - I'd love to hear some feedback from anyone who's gone through the series themselves.
 

qft

New member
Joined
Sep 5, 2005
Messages
2
Reaction score
0
I'm a total noob when it comes to Delphi, but from what I can gather, procedures and functions are like reusable blocks of code that can be called whenever you need 'em. If you guys could share some examples of how they're used in real-world apps, that'd be sick.
 
Top