Идентификаторы
Идентификаторы – это имена констант, переменных, типов, свойств, процедур, функций, программ и программных модулей. Могут быть длиной до 255 символов, начинаться с символа или знака подчеркивания; могут содержать символы, цифры и знаки подчеркивания и не должны содержать пробелы.
В языке Object Pascal идентификаторы не чувствительны к регистру букв, то есть нет различия между строчными и заглавными буквами. Таким образом, идентификатор функции IntToStr равнозначен идентификатору inttostr или intTOstr.
В качестве имен идентификаторов не могут использоваться следующие зарезервированные слова:
• and, array, as, asm, at, automated;
• begin;
• case, class, const, constructor;
• destructor, div, do, downto;
• else, end, except, exports;
• file,finalization, finally, for, function;
• goto;
• if, implementation, in, inherited, initialization, inline,interface, is;
• label, library;
• mod;
• nil, not;
• object, of, on, or, out;
• packed, private, procedure, program, property, protected, public, published;
• raise,record, repeat, resourcestring;
• set, shl, shr, string;
• then, threadvar, to, try, type;
• unit, until, uses;
• var;
• while, with;
• xor.
К числовым типам языка Object Pascal относятся целочисленные и типы чисел с плавающей запятой (табл. Д.1).
Таблица Д.1. Числовые типы данных языка Object Pascal
Целочисленные типы Диапазон значений Типы чисел с плавающей запятой Диапазон значений Byte 0..255 Real 5.0·10-324..1.7·10308 ShortInt -128..127 Real48 2.9·10-39..1.7·1038 SmallInt -32768..32767 Single 1.5·10-45..3.4·1038 Word 0..65535 Double 5.0·10-324..1.7·10308 Integer, LongInt -2147483648..21474883647 Extended 3.6·10-4951..1.1·104932 Cardinal, LongWord 0..4294967295 Comp -263+1..263–1 Int64 -263..263–1 Currency -922337203685477.5808..922337203685477.5807
Символьный тип обозначается при помощи ключевого слова Char к его значения хранят только один символ.
В языке Object Pascal используются два обобщенных строковых типа:
• String — если в проекте Delphi указана директива компилятора {$H+} (поддержка больших строк), то этому типу соответствуют строки длиной от 0 до 2147483648 символов; в противном случае типу String соответствуют строки длиной от 0 до 255 символов;
• PChar — тип, аналогичный строковому типу языка C.
По своей сути, строковые значения — это массивы символов, в которых нумерация элементов для типа String начинается с 1, а для типа PChar — с 0.
Переменная булевого типа занимает один байт памяти и может принимать только одно из двух значений: True ("истина", "да", 1) или False ("ложь", "нет", 0). Булев тип обозначается при помощи ключевого слова Boolean.
Массив — это упорядоченная именованная совокупность однотипных значений, к которым можно обращаться по их порядковому номеру (индексу). Для описания массивов в языке Object Pascal используют следующие формы:
• array [1..N1] of type — одномерный массив фиксированного размера (N1 — размерность массива, type — тип значений, хранимых в массиве);
• array[1..N1, 1..N2] of type — двухмерный массив фиксированного размера;
• array[1..N1, 1..N2, 1..N3] of type — трехмерный массив фиксированного размера;
• array of type — массив переменного размера. Длину таких массивов можно изменять в процессе выполнения программы при помощи процедуры SetLength. Индексация значений начинается с 0.
Константа — это именованное фиксированное значение. Для объявления констант используют конструкцию вида:
const имя_константы = значение;
Например:
const Factor = 1.756;
Тип константы определяется автоматически по присвоенному ей значению.
Переменная — это именованное значение определенного типа, которое можно изменять в процессе выполнения программы. Для объявления переменных используют запись следующего вида:
var имя_переменной: имя_типа;
Например :
var
i: Integer; //переменная i типа Integer
s: String; //переменная S типа String
MyArray: array[1..10] of Char; {переменная MyArray — массив значений типа Char. Эту переменную можно было бы также объявить как String[10]}
При обращении и инициализации переменных используют следующие правила:
• для присвоения значений переменным используют оператор присваивания :=;
• строковые и символьные значения, присваиваемые переменным, заключают в одинарные кавычки ('с', ' строка');
• для обращения к отдельным элементам массива или отдельным символам строки используют запись вида: а[1] — для одномерных массивов и строк; а[3][1] – для двухмерных массивов; а[1][6][2] — для трехмерных массивов и т. д.;
• в качестве типа переменной может быть указан как встроенный тип языка Object Pascal, так и пользовательский, определенный при помощи ключевого слова type (создание пользовательских типов рассматривается ниже).
К переменным в программе обращаются по их идентификаторам.
Пример для типа String:
var
s1, s2: String; //объявляем две переменные типа String
с: Char; //и одну типа Char
...
s1:= 'Строка'; //присваиваем s1 некоторое значение
с:= s[1]; //переменная с хранит значение 'С'
s2:= s1 + с; //в s2 сохраняем строку 'СтрокаС'
…
Пример для динамического массива:
var
MyArray: array of Char; s: String;
…
SetLength(MyArray, 1); //устанавливаем длину массива = 1
A[0]:= 'С';
SetLength(MyArray, 2); //устанавливаем длину массива = 2
А[1]:= 'т';
s:= А[0] + А[1] + 'рока' //в s сохраняется значение 'Строка'
…
Пользовательские типы данных
Для объявления пользовательских типов, используют конструкцию вида:
type имя_типа = описание_типа;
К примеру, таким образом можно объявлять типы множеств, перечислимые типы и подтипы.
Множество — это совокупность однотипных целочисленных или символьных значений, среди которых не может быть двух одинаковых. Для объявления типа множества используется запись вида
set of первое_значение..последнее_значение;
Совокупности значений, которые используются для инициализаций переменных этого типа, заключают в квадратные скобки, а значения отделяются друг от друга запятыми.
Например:
type
TNumbers = set of 1..10;
TAlphabet = set of 'a';
var
Odds, Evens: TNumbers;
ABC: TAlphabet;
…
Odds:= [1, 3, 5, 7, 9];
Evens:= [2, 4, 6, 8, 10];
ABC:= ['a', 'b', 'с'];
…
Перечислимые типы используют для определения упорядоченных наборов значений в виде списка идентификаторов, соответствующих этим значениям. Для объявления таких типов используют запись следующего вида:
type имя_типа = (элемент1, ... , элементN);
По умолчанию, первому элементу соответствует число 0, второму — 1 и т.д. Для того чтобы сопоставить с каким-либо элементом другое значение, следует использовать запись вида элемент = число.
Для извлечения числа, соответствующего некоторому элементу, используется функция Ord.
Пример:
type
TDigits = (Zero, One, Two, Three, Four, Five, Six, Seven Eight, Nine, Ten);
TConstants = (a = 10, b = 3);
var
x: TDigits;
k: TConstants;
MyResult: integer;
…
k:= b; //k присваиваем значении 3
if x = Zero then k:= a //если x=0, то к присваиваем 10
MyResult:= Ord(k); //MyResult = 3 или 10
…
Подтип определяет некоторый диапазон целочисленных или символьных значений. Для его объявления используют запись вида:
type имя_типа = начало..конец;
Переменные этого типа не могут принимать значений вне указанного диапазона. Пример:
type
TDigits = (Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten); //перечислимый тип