Язык:
Русский
English
Типизированные константы
Типизированные константы подобны инициализированным переменным (переменным с заданными начальными значениями).
В отличие от нетипизированных констант, объявление типизированной константы определяет сразу и тип, и значение константы.
Типизированные константы могут использоваться подобно переменным того же самого типа, и могут находиться в левой части оператора присваивания.
Обратите внимание: типизированные константы инициализируются только один раз - при их создании в начале программы. При каждом входе в процедуру или функцию, локальные типизированные константы не инициализируются повторно.
В дополнение к стандартным константам, значение типизированной константы может быть задано выражением базового адреса.
Примеры
(* Объявления типизированных констант *)
type
Point = record
X, Y : Real
end;
const
Minimum : Integer = 0;
Maximum : Integer = 9999;
Factorial : array [1 .. 7] of Integer =
(1, 2, 6, 24, 120, 720, 5040);
HexDigits : set of char =
['0' .. '9', 'A' .. 'F', 'a' .. 'f'];
Origin : Point = (X : 0.0; Y : 0.0);
Ада
-- Объявления типизированных констант
type Point is record
X, Y : Float;
end record;
Minimum : constant Integer := 0;
Maximum : constant Integer := 9999;
Factorial : constant array (1 .. 7) of Integer :=
(1, 2, 6, 24, 120, 720, 5040);
Factorial2 : constant array (Positive range <>) of Integer :=
(1, 2, 6, 24, 120, 720, 5040);
Hex_Digits : constant array (Character) of Boolean :=
('0' .. '9' | 'A' .. 'F' | 'a' .. 'f' => True, others => False);
Hex_Digits2 : constant Character_Set := -- из пакета Ada.Strings.Maps
To_Set (Ranges => (('0', '9'), ('A', 'F'), ('a', 'f')));
Origin : constant Point := (X => 0.0, Y => 0.0);
Типизированные константы Ады имеют несколько отличий от типизированных констант Borland Pascal.
В Borland Pascal объявление типизированной константы на самом деле создаёт переменную. Поскольку синтаксис блока var не допускает инициализации, для инициализации программисты используют блок const. С точки зрения компилятора, типизированная константа становится не отличима от инициализированной переменной. В языке Ада всё так, как должно быть: переменные можно инициализировать при объявлении, а константы нельзя изменять после инициализации.
Message : constant String := "Привет, мир!"; -- строковая константа
Some_Var : Integer := 5; -- инициализированная переменная
Some_Const : constant Character := 'G'; -- символьная константа
Как и в случае с переменными Ады, выражение не обязано быть постоянным. Объявление константы может находиться во внутренних блоках объявлений, например, внутри процедур и функций:
function Prefixed_Get_Line return String is
Console_Input : constant String := Get_Line;
begin
return "> " & Console_Input;
end Prefixed_Get_Line;
Локальные константы инициализируются при каждом вызове и, подобно локальным переменным, могут иметь разные значения в разных рекурсивных экземплярах процедуры/функции.
Напоследок, вдруг не понятно, в чём прикол в Паскале:
(* Это Паскаль *)
program Typed_Const_Demo;
procedure Test;
{ константности не больше, чем локальности }
const X : Integer = 5;
begin
WriteLn(X);
X := 7;
end;
begin
Test; Test;
{ X := 3; это вызовет ошибку компиляции }
end.
Вывод программы
5
7