Способи передачі параметрів у підпрограми

За умовчанням передбачається, що параметри звичайних типів, наприклад Real, Integer, String, передаються за значенням, а параметри таких типів як візуальні компоненти, динамічні масиви передаються за найменуванням. Якщо виникає необхідність явно вказати, що параметр передається за найменуванням, то перед ім'ям параметра або переліком імен одного типу пишеться словоvar.

3.1.2.1 Передача параметрів за значенням

Передача параметрів за значенням передбачає, що під час виклику підпрограми у пам'яті буде виділено спеціальна область для запису копій значень фактичних параметрів, із якими і працюватиме підпрограма.

Такий спосіб передачі захищає змінні, передані в підпрограму як параметри, від непередбаченої зміни, оскільки підпрограма працює з копіями. Крім того, такий спосіб дозволяє як фактичні параметри задавати вирази. При передачі параметрів буде обчислено значення цього виразу та передано до підпрограми.

Недолік такого способу передачі полягає в тому, що при передачі параметрів, що вимагають багато пам'яті, наприклад великі масиви чисел або довгі рядки, копії займають багато місця в пам'яті і потрібно багато часу для пересилання даних з одного місця пам'яті в інше.

3.1.2.2 Надсилання параметрів за найменуванням

При такому способі передачі як фактичні параметри можна передавати тільки змінні. Вираз і навіть окреме число або символ передати за назвою не можна.

Але побічний ефект має позитивний бік. Передавання параметрів за найменуванням можна використовувати для повернення результатів роботи підпрограми через фактичні параметри. Такий спосіб повернення особливо ефективний, коли потрібно повернути кількапараметрів. Адже функція повертає лише одне значення.

Вище, у пункті 3.1.1 розглядався приклад процедури з передачею параметра за назвою.

Розглянемо ще один приклад використання передачі параметрів за найменуванням для повернення результатів роботи підпрограми.

У даному додатку для розрахунків за формулою використовується процедура зчитування коефіцієнтів рівняння. Вихідний текст цієї процедури наведено нижче.

Procedure getKoef (var kA, kB, kC:Real);

Begin

end;

У цій процедурі вміст текстових полів перетворюється на речові числа, і результати перетворення надаються формальним параметрам, які оголошені як передані за назвою. Це вказує словоvar перед іменами параметрів.

Звернення до цієї процедури відбувається в іншій процедурі, яка обробляє подію на кнопці «Розрахунок за формулою». Фрагмент цієї процедури наведено нижче.

procedure TfrmSubroutine.btnCalculateRootsClick(Sender: TObject);

var a, b, c: Real;

Begin

//До виклику процедури getKoefKvUr

// значення зміннихa,b,cне визначені

// Після виклику процедури значення змінних

//a,b,cвідповідають вмісту тектових полів