Константы

Константа – именованный элемент программы, который не меняет свое значение. Перед употреблением должна быть объявлена в разделе констант const. Определены два типа констант: истинные и типизированные.

Истинная константа

Она объявляется со значением. Ее тип неизвестен, поэтому ее значение в программе менять нельзя:

const ConstName=<Значение>;

Типизированная константа объявляется с типом и значением. В сущности это инициализированная переменная. Ее значение в программе менять можно.

const ConstName:NameType=<Значение>;

Значением типизированной константы могут быть:

  • Конкретные данные (число, строка).
  • Выражение.
  • Для указателей Nil или адрес локальной переменной.
  • Файловый тип и тип Variant запрещены.

Как и Turbo Pascal, FPC поддерживает простые и типизированные константы.

Реализация объявлений простых констант одинакова во FPC, Turbo Pascal и Delphi.

Компилятору необходимо вычислять значение выражения в объявлении константы во время компиляции. Это значит, что большинство функций библиотеки времени выполнения нельзя использовать в объявлении констант. Тем не менее, можно использовать такие операции и функции, как +, -, *, /, not, and, or, div, mod, ord, chr, sizeof, pi, int, trunc, round, frac, odd. Можно объявить константы только следующих типов: порядковые, вещественные, Char и String. Правильные объявления констант:

Const

r = 2.7182818;                      // Вещественная константа

i = 2;                                // Порядковая (целая) константа

c = ’4′;                             // Символьная константа

s = ‘Это строковая константа’; // Константа типа String

cc = chr(32);

ls= SizeOf(Longint);

Простой константе не разрешается присваивать значение. Так, если даны вышеприведенные объявления, то следующая операция присваивания приведет к ошибке компилятора:

s:= ‘другая строка’;

Типизированные константы

Они служат для инициализации переменных. В отличие от простых констант, во время выполнения программы им можно присваивать значения. Они отличаются от обычных переменных тем, что автоматически получают значение в начале работы программы, а обычные переменные должны инициализироваться явным образом в ходе ее работы. Пусть дано объявление:

Const

S: String = ‘Это типизированная константа’;

Тогда

S:= ‘Result: ‘+Func;

является допустимым присваиванием, где Func – это функция, возвращающая значение типа String. Типизированные константы часто используют для инициализации массивов и записей. Для массивов начальные значения должны быть отделены друг от друга запятой и указаны в круглых скобках. Количество значений должно в точности совпадать с количеством элементов массива в объявлении типа. Например,

Const

tt: array [1..3] of string[20] = (‘ikke’, ‘gij’, ‘hij’);

ti: array [1..3] of Longint = (1,2,3);

Что касается константных записей, то все элементы записи в круглых скобках, отделенные друг от друга запятыми, должны быть указаны в формате Поле. Значение, например,

Type

Point = record

X,Y: Real

end;

Const

Origin: Point = (X:0.0; Y:0.0);

Порядок полей в константной записи должен совпадать с порядком полей в объявлении типа, иначе компилятор выдаст ошибку.

Замечание. Следует подчеркнуть, что типизированные константы получают начальные значения в начале работы программы. Это верно и для локальных типизированных констант. Локальные типизированные константы также инициализируются в начале работы программы. Если значение локальной типизированной константы менялось в предыдущем вызове функции, то это её изменённое значение сохраняется, то есть локальные типизированные константы не инициализируются при каждом вызове функции.

Ресурсные строки

Особый вид части объявления констант – это часть Resourcestring. Эта часть подобна секции Const, но поддерживает только константы типа строка и доступна только в режимах Delphi или objfpc.

Следующий пример представляет определение resourcestring:

Resourcestring

FileMenu = ‘&File…’;

EditMenu = ‘&Edit…’;

Все константы строк определены в секции resourcestring и хранятся в специальных таблицах, позволяющих манипулировать значениями строк в реальном режиме с некоторыми особыми механизмами.

Семантически строки подобны константам. Им не могут быть присвоены значения, за исключением присвоения через специальный механизм в модуле objpas. Однако они могут быть использованы в присвоениях или выражениях, как обычные константы. Главное применение секции resourcestring – для обеспечения лёгкой интернационализации. Можно не меняя имени строки изменить ее содержания без перепрограммирования исходника.

Twitter SEO Community Ваау! News2.ru Chipp Korica SMI2 Google Bookmarks Digg I.ua Закладки Yandex Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong

Copyright © 2009-2010 Программирование на паскале.