Програмування на delphi
Додавання дужок при виклику процедур і функцій без параметрів вже давно не є новинкою в Delphi, проте, ця можливість мало відома. Цю можливість гідно оцінять ті програмісти, яким доводиться працювати на двох мовах (C ++ і Delphi), так як їм не потрібно буде постійно пам'ятати про різницю в синтаксисі при виклику процедур і функцій в різних мовах. У Delphi обидва варіанти, наведені нижче, вважаються коректними.
Вперше концепція перевантаження процедур і функцій була реалізована в Delphi4. Вона дозволяє мати кілька різних процедур і функцій з однаковими іменами, але з різними списками параметрів. Такі процедури і функції повинні бути описані із застосуванням директиви overload.
При виклику процедури Test, Delphi сама вирішить, яку з трьох процедур необхідно виконати, в залежності від переданого їй параметра. Але потрібно відзначити, що це не найбезпечніша можливість мови. Застосування перевантажуються процедур і функцій може стати невичерпним джерелом важковловимих помилок в програмі. Тому користуйтеся цією можливістю обережно.
Pascal дозволяє передавати параметри в функції і процедури або за значенням, або за посиланням. Рухаючись параметр може мати будь-який вбудований або призначений для користувача тип або бути відкритим масивом. Параметр також може бути константою, якщо його значення в процедурі або функції не змінюється.
Передача параметрів за значенням
Цей режим передачі параметрів застосовується за умовчанням. Якщо параметр передається за значенням, створюється локальна копія даної змінної, яка і надається для обробки в процедуру або функцію. Подивіться на наступний приклад:
При виклику зазначеної процедури буде створена копія передається їй як параметр рядка s, з якої і буде працювати процедура Test. При цьому всі внесені в рядок зміни жодним чином не позначаться на вихідної змінної s.
Однак це не відноситься до об'єктів. Наприклад, якщо в функцію передається змінна (а точніше екземпляр об'єкта) TStringList, то в даному випадку відбудеться передача за посиланням (навіть якщо це не зазначено явно).
Передача параметрів за посиланням
Pascal дозволяє також передавати параметри в функції або процедури по посиланню - такі параметри називаються параметрами-змінними. Передача параметра за посиланням означає, що функція або процедура зможе змінити отримані значення параметрів. Для передачі параметрів по посиланню використовується ключове слово var. поміщається в список параметрів викликається процедури або функції.
Передача параметрів констант
Передача відкритих масивів
Відкритий масив параметрів дозволяє передавати в функцію або процедуру різну кількість параметрів. Як параметри можна передати або відкритий масив елементів однакового типу, або масиви констант різного типу. У наведеному нижче прикладі оголошується функція, якою як параметр повинен передаватися відкритий масив цілих чисел.
У відкритому масиві можна передавати змінні, константи або вирази з констант. Нижче наведено приклад, який демонструє виклик функції AddEmUp з передачею їй кількох різних елементів.
Для отримання інформації про фактично переданому масиві параметрів в функції або процедури можуть використовуватися функції High, Low і SizeOf. Для ілюстрації їх використання нижче наведений текст функції AddEmUp, яка повертає суму всіх переданих їй елементів масиву A.
Викликати оголошену вище функцію можна, наприклад, за допомогою такого оператора:
При передачі функції або процедури масиву констант всі передані параметри компілятор неявно конвертує в тип TVarRec. Тип даних TVarRec оголошений в модулі System наступним чином:
Поле VType визначає тип містяться в даному екземплярі записи TVarRec даних і може приймати одне з нижче наведених значень.
Оскільки масив констант здатний передавати дані різних типів, це може викликати певні труднощі при створенні обробної отримані параметри функції або процедури. Як приклад роботи з таким масивом розглянемо реалізацію процедури WhatHaveIGot, яка переглядає елементи отриманого масиву параметрів і виводить їх тип.
Повернуться до стандартних значень
У другому випадку можна задати тільки значення параметра s, а для параметра i використовувати значення, встановлене за замовчуванням:
При використанні значенні параметрів за замовчуванням слід пам'ятати про декілька наведених нижче правилах.
- Параметри, що мають значення за замовчуванням, повинні розташовуватися в кінці списку параметрів. Параметр без значення за замовчуванням не повинен зустрічатися в списку після параметра, що має значення за замовчуванням.
- Значення за замовчуванням можуть присвоюватися тільки параметрам звичайних типів, вказівниками або безлічам.
- Значення за замовчуванням може передаватися тільки за значенням або з модифікатором const. Воно не може бути посиланням або Нетипізовані параметром.
Директива забороняє виклик функцій як процедур (з ігноруванням повертається результату). За замовчуванням цей режим включений (). Так ось, запам'ятайте, використання змінної Result неприпустимо при скинутий прапорці опції Extended Syntax, розташованому у вкладці Compiler діалогового вікна Project Options, або при вказівці директиви компілятора.
У кожній функції мови Objecl Pascal існує локальна змінна з ім'ям Result, призначена для розміщення значення, що повертається. Крім того, повернути значення з функції можна також шляхом присвоєння значення змінної, що має те ж ім'я, що і дана функція. Це стандартний синтаксис мови Pascal, що зберігся від його попередніх версій. При використанні в тілі функції змінної з її ім'ям не забувайте, що існують великі відмінності в обробці цього імені - все залежить від того, де вона розташована - в лівій частині оператора присвоєння або ж в будь-якому іншому місці тексту функції. Якщо ім'я функції зазначено в лівій частині оператора присвоєння, то передбачається, що призначається повертається функцією значення. У всіх інших випадках передбачається, що здійснюється рекурсивний виклик цієї функції.