Константа – это хранящееся в компьютере число или строка, значение которого (которой) остается неизменным на протяжении всего времени выполнения программы.
Как и переменная, константа хранится в ячейке оперативной памяти с определенным адресом. Константы делятся на именные и неименные. Именная константа может быть определена с помощью любого математического или строкового выражения. Во время компиляции имя константы просто замещается в программе ее значением. Числа и строки, записанные в исходном коде, называются неименными константами. Тип неименованной константы определяется автоматически, по умолчанию:
любая последовательность цифр (возможно, предваряемая знаком "-" или "+" или разбиваемая одной точкой) воспринимается компилятором как неименованная константа - число (целое или вещественное) (см. табл. 4);
любая последовательность символов, заключенная в апострофы, воспринимается как неименованная константа – строка, если требуется предствить сам апостроф, он дублируется (см. табл. 4);
символьные неименованные константы записываются в одной из трех форм (см. табл. 4): 1) символ заключенный в апостроф, 2) десятичный код символа, предваряемый знаком #, 3) буква предваряемая знаком ^ (управляющий символ).
Таблица 4 – Примеры неименованных констант
Константы
Целые
Вещественные
Символьные
Строковые
Десятичные
Шестнадцатеричные*
С плавающей точкой
С порядком
$0101
$FFA4
-0.26
.005
1.2e4
0.1E-5
'k'
#186
^M
'абырвал'
'I''m fine'
*Знак $ перед числом указывает о шестнадцатеричном представлении
Кроме того, существуют две специальные константы true и false, относящиеся к логическому типу данных.
В Object Pascal для объявления именных констант используется оператор const. Как и в случае var, если несколько операторов const расположены непосредственно один за другим, то ключевое слово const можно указывать только для первого оператора. Синтаксис оператора const имеет вид
const
имя_константы = выражение;
[имя_константы1 = выражение1;]
или
const
имя_константы = тип_константы(выражение);
[имя_константы1 = тип_константы1(выражение1);]
Если не указывать тип константы, то по ее внешнему виду компилятор сам определит, к какому (базовому) типу ее отнести. Если выражение число вещественное, то компилятор определит константу к типу Extended, если целое, то тип согласно таблице:
Диапазон значения константы (16 с.с.)
Диапазон значения константы (10 с.с.)
Тип
-$8000000000000000..-$80000001
-263..-2147483649
Int64
-$80000000..-$8001
-2147483648..-32769
Integer
-$8000..-$81
-32768..-129
Smallint
-$80..-1
-128..-1
Shortint
0..$7F
0..127
0..127
$80..$FF
128..255
Byte
$0100..$7FFF
256..32767
0..32767
$8000..$FFFF
32768..65535
Word
$10000..$7FFFFFFF
65536..2147483647
0..2147483647
$80000000..$FFFFFFFF
2147483648..4294967295
Cardinal
$100000000..$7FFFFFFFFFFFFFFF
4294967296..263-1
Int64
Если выражение строка – то к любому совместимому со String типом, а если строка имеет длину 1, то тип совместим с любым символьным.
Любую уже описанную константу можно использовать при объявлении других констант, переменных и типов данных. Вот несколько примеров описания нетипизированных именованных констант:
const
n = -10;
m = Int64(1000000000);
mmm = n*100;
x = 2.5;
c = string('z');
s = 'string';
b = true;
Чтобы по имени можно было отличить константу от переменной, имена констант следует составлять из прописных букв с символами подчеркивания, например days_per_week.
Изменить именную константу довольно легко, для этого достаточно изменить одну строку исходного кода, в котором определено ее значение. В то же время изменять неименную константу весьма неудобно: нужно найти и модифицировать каждую строку кода, в которой она используется. Поэтому для облегчения модификации программы рекомендуется использовать именные константы.
Как мы уже знаем, константы – это данные программы, которые не могут изменять свое значение во время выполнения программы. Но в этом правиле имеется исключение – типизированные константы.
Описание типизированных констант производится по следующему шаблону:
В следующем фрагменте кода объявляется несколько типизированных констант:
const
n: integer = -10;
x: real = 2.5;
c: char = 'z';
b: boolean = true;
Значение типизированных констант можно изменять во время выполнения программы, но при условии, что была выполнена директива компилятора {$J+}. Если была выполнена директива {$J–}, то изменять значение типизированных констант нельзя и они превращаются в обычные именованные константы.