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

A

AngelOfLove

В этом уроке я расскажу вам об устройстве и применении процедур и функций в языке программирования 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;

Вызов функции осуществляется через присвоение, так как это показано в примере. Параметры функции указываются точно так же как и у процедуры.
 
Похожие темы
A Delphi для начинающих. Урок 10. Циклы. Работа с массивами Программирование 0
A Delphi для начинающих – Урок 9 – Массивы Программирование 0
A Delphi для начинающих – Урок 8 – Условия. Оператор Case Программирование 0
A Delphi для начинающих – Урок 7 – Условия. Оператор IF Программирование 0
A Delphi для начинающих – Урок 6 – Пишем свой калькулятор Программирование 0
A Delphi для начинающих – Урок 5 – Работаем с компонентами Программирование 0
A Delphi для начинающих – Урок 4 – Работа с переменными Программирование 0
A Delphi для начинающих – Урок 3 – Создание переменных Программирование 0
A Delphi для начинающих – Урок 2 — События Программирование 0
A Delphi для начинающих — Урок 1 — Среда разработки Delphi Программирование 0
C Реверс-инжирниринг бота на Delphi, есть проблемы Свободное общение 0
M [Delphi] Работа VKAPI, на примере бота Программирование 3
T Пишем WinLocker на Delphi Программирование 0
D Нужна помощь по Delphi! ЗАПЛАЧУ! Программирование 1
A Потоки в Delphi. TThread Программирование 0
A Delphi. Урок 17. Типы Программирование 0
A Delphi. Урок 16. Исключительные ситуации Программирование 0
A Delphi. Урок 15. Математические операции Программирование 0
A Delphi. Урок 14. Работа со списками строк TStringList или «сложные» типы Программирование 0
A Delphi. Урок 13. Работа со строками Программирование 0
A Delphi. Урок 12. Преобразование числа в строку и строки в число Программирование 0
A Простые шутку в DELPHI Программирование 5
A Мои старые исходники на Delphi Программирование 1
A Несколько шпор по Delphi =) Программирование 3
L Загружаем компьютер другу. Delphi,rad studio Программирование 0
I Country IP Ranges Generator v1.0 [Source][Delphi] Программирование 3
B Помощь [Delphi] Программирование 0
B VK Post Grabber [Source][Delphi] Программирование 0
Admin [delphi] downloader winapi Программирование 0
Admin Статья Разбираем инциденты, анализируем honeypots через дашборды для поимки хищников, атакующих нашу инфраструктуру. [Part 2] Анонимность и приватность 0
Admin Статья Разбираем, расставляем honeypots для поимки хищников, атакующих нашу инфраструктуру. [Part 1] Анонимность и приватность 0
Admin Статья Настройки Mozilla Firefox для параноиков и тест Mullvad Browser Анонимность и приватность 0
Admin Статья Написание вредоносного ПО для Windows: для развлечения и прибыли Вирусология 1
Admin Интересно Когда бэкап превращается в тыкву. Veeam случайно создала идеальную точку входа для хакеров. Новости в сети 0
Admin Статья Как оставаться незаметным в 2025 году – простые правила оперативной безопасности для всех. Анонимность и приватность 0
Admin Интересно Ваш роутер D-Link работает уже 10 лет? У нас для вас (и его безопасности) очень плохие новости. Новости в сети 0
Admin Интересно Быстрее, дешевле, проще. Google готовит новую ИИ-модель для генерации изображений. Новости в сети 0
Admin Статья Свежие уязвимости для ОС Windows. Уязвимости и взлом 0
Admin Статья Не доверяй своей железке: Гайд по по-настоящему безопасным ОС для тех, кто в теме Анонимность и приватность 0
Admin Статья Методика добычи высококонвертируемого и дешевого трафика для целевых атак. Полезные статьи 0
Admin Статья Шифрование для ленивых Полезные статьи 0
Admin Интересно $500 – антивирусы и EDR больше не помогут. Хакеры начали торговлю инструментом для обхода защиты Windows. Новости в сети 0
Admin Интересно Охотник стал добычей. Как «безопасники» ловят вирусы, пытаясь скачать инструменты для их поиска. Новости в сети 0
Admin Интересно Загрузил документ — лишился «учётки». ИИ-помощник для юристов подставил под удар 200 тысяч компаний. Новости в сети 0
Admin Статья Софт для реверсинга Вирусология 0
Admin Статья Софт для разработки эксплойтов 2 часть Вирусология 0
Admin Статья Софт для разработки эксплойтов 1 часть Вирусология 0
Admin Интересно 0 на VirusTotal и root-доступ: хакеры смогли обмануть все антивирусы с помощью легального софта для админов. Новости в сети 0
Admin Интересно У этого Марио плохая карма. Киберпреступники превратили любимого героя детства в кошмар для пользователей. Новости в сети 0
Admin Статья ReconSpider - продвинутая платформа для сканирования IP-адресов. OSINT 0

Название темы