IPB

> Типизированные константы
Чат
Форум
Загрузка...
 

Язык:
Русский
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

Смотри также

 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"