Опис констант
Розділ опису іменованих констант починається зі службового слова const, після якого йдуть елементи опису виду
ім'я константи = значення;
або ім'я константи: тип = значення;
наприклад: const
Pi = 3.14;
Count = 10;
Name = 'Mike';
DigitsSet = ['0 '.. '9'];
Arr: array [1 .. 5] of integer = (1,3,5,7,9);
Rec: record name: string; age: integer end = (name: 'Іванов'; age: 23);
Arr2: array [1 .. 2,1 .. 2] of real = ((1,2), (3,4));
Опис тегів
Розділ опису міток починається з зарезервованого слова label, після якого слідує список міток, що перераховуються через кому. В якості міток можуть бути використані ідентифікатори і позитивні цілі числа: label a1, l2, 777777;
Опис типів
Розділ опису типів починається зі службового слова type, після якого йдуть рядки виду
ім'я типу = тип;
наприклад,
type
myint = integer;
arr10 = array [1 .. 10] of integer;
pinteger = ^ integer;
A = class
i: integer;
constructor Create (ii: integer);
begin
i: = ii;
end;
end;
При описі рекурсивних структур даних покажчик на тип може фігурувати раніше опису самого типу у визначенні іншого типу: type
PNode = ^ TNode;
TNode = record
data: integer;
next: PNode;
end;
При цьому важливо, щоб визначення обох типів перебували в одному розділі type.
На відміну від Delphi Object Pascal наступний рекурсивний опис вірний:
type
TNode = record
data: integer;
next: ^ TNode;
end;
Зазначимо, що для посилальних типів (класів) дозволяється опис поля з типом, що збігається з типом поточного класу:
type
Node = class
data: integer;
next: Node;
end;
Опис процедур і функцій
Процедура або функція являє собою послідовність операторів , яка має ім'я, список параметрів і може бути викликана з різних частин програми . Функції, на відміну від процедур , в результаті свого виконання повертають значення, яке може бути використане у виразі. Для однаковості функції та процедури називаються підпрограмами .
Будь-яка використовувана в програмі процедура або функція повинна бути попередньо описана в розділі описів .
Опис процедури має вигляд:
procedure ім'я ( список формальних параметрів) ;
розділ описів
begin оператори end ;
Опис функції має вигляд :
function ім'я ( список формальних параметрів) : тип значення ;
розділ описів
begin оператори end ;
Оператори підпрограми , облямовані операторними дужками begin / end , називаються тілом цієї підпрограми .
Список формальних параметрів разом з оточуючими дужками може бути відсутнім. Він складається з однієї або декількох секцій , розділених символом " ; " . Кожна секція складається зі списку змінних , що перераховуються через кому , після якого йдуть двокрапка і тип . Кожна секція може передувати ключовим словом var або const , що вказує на те , що параметри передаються за посиланням ( см.п. Параметри процедур і функцій). Тип формального параметра повинен бути або ім'ям , або динамічним масивом , або безліччю , або процедурної змінної ( для останніх трьох типів має місце структурна еквівалентність типів).
Розділ описів процедури або функції влаштований так само , як і розділ описів основної програми . Тут описуються так звані локальні змінні і константи , типи (за винятком класів - класи можна описувати тільки глобально ) а також вкладені процедури і функції . Всі такі локальні об'єкти доступні лише всередині даної підпрограми і не видно ззовні. Приклад опису процедури наводиться нижче:
procedure DoAdd ( a , b : real ; var res : real ) ;
begin res : = a + b ;
end ;
Усередині тіла функції ім'я цієї функції можна використовувати як спеціальну змінну , якій необхідно присвоїти значення, що повертається .
наприклад: function Add ( a , b : real ) : real ;
begin Add : = a + b ;
end ;
Ім'я функції може бути використано з метою повернення значення тільки в лівій частині оператора присвоювання . Якщо ім'я функції зустрічається у виразі , то це або трактується як рекурсивний виклик цієї функції , або використовується для присвоювання сумісної процедурної змінної.
Замість імені функції , всередині тіла функції можна використовувати іншу спеціальну змінну з ім'ям Result . На відміну від імені функції , змінну Result можна використовувати і у виразах :
function MinElement ( a : array of real ) : real ;
var x : real ;
begin Result : = real.MaxValue ;
foreach x in a do
if x < Result then
Result : = x ;
end ;
Якщо всередині функції не привласнити імені функції або змінної Result деяке значення , то функція поверне в результаті свого виклику непередбачуване значення .
У розділі описів підпрограми можна описувати інші підпрограми . Виняток становлять методи класу , описувані безпосередньо в тілі класу : в них не можна описувати локальні підпрограми зважаючи синтаксичної неоднозначності.
