КОНСТАНТЫ
Если в переменных обычно хранятся значения, которые могут изменяться, то константы используются для хранения значений, которые изменению не подлежат. На Форте мы создаем константу и тут же устанавливаем ее значение, например:
220 CONSTANT ПРЕДЕЛ
Здесь определена константа с именем ПРЕДЕЛ, которой присвоено значение 220. Теперь мы имеем право подставлять слово ПРЕДЕЛ вместо значения
: ?ЖАРКО ( температура -- ) ПРЕДЕЛ > IF ." Опасно — Уменьшите нагрев ! " THEN ;
В том случае, когда число в стеке больше 220, выдается предупреждающее сообщение. Заметьте, что, говоря ПРЕДЕЛ, мы получаем значение, а не адрес. Нам здесь не требуется «выборка». В этом и состоит основное отличие переменных от констант. Дело в том, что при работе с переменной нам нужен адрес, чтобы иметь возможность как выборки значения, так и его запоминания. При использовании же константы всегда требуется значение (мы ни-когда в нее ничего не запоминаем).
Одним из примеров применения констант может служить именование аппаратного адреса. Допустим, что программа для управления фотокамерой с помощью микропроцессора содержит следующее определение:
: СНИМОК ЗАТВОР ОТКРЫТЬ БРЕМЯ ВЫДЕРЖАТЬ ЗАТВОР ЗАКРЫТЬ ;
Здесь слово ЗАТВОР определено как константа при условии, что его выполнение обеспечивает аппаратный адрес затвора фотокамеры. Оно может быть определено так:
HEX ЗЕ27 CONSTANT ЗАТВОР DECIMAL
Слова ОТКРЫТЬ и ЗАКРЫТЬ могут быть просто определены:
: ОТКРЫТЬ ( а -- ) 1 SWAP ! ; : ЗАКРЫТЬ ( а -- ) 0 SWAP ! ;
так что выражение ЗАТВОР ОТКРЫТЬ запишет единицу по адресу затвора, и он откроется.
Использование в определениях констант, а не изображений самих чисел является важным элементом хорошего стиля программирования. Прежде всего наличие констант делает вашу программу более читабельной. Все определения Форта должны быть так же самодокументированы, как определение СНИМОК.
Не менее существенно и то, что значения могут изменяться (могут изменяться, к примеру, аппаратные средства).
Если в такой ситуации вам достаточно внести изменения в один фрагмент программы — в определение константы, — то все остальное будет сделано автоматически, без вероятных пропусков, как это имело бы место при корректировке вручную.
Третье преимущество заключается в том, что в компилируемой форме определение, содержащее константу, занимает меньший объем памяти, чем то же определение, но с изображением числа вместо константы. Если некоторое число применяется неоднократно, то получаемый при этом выигрыш перекрывает расходы на описание константы. Поэтому во многих Форт-системах часто повторяющиеся числа определены как константы:
0 CONSTANT 0 1 CONSTANT 1 и т.д.
В дальнейшем будем считать, что в вашей системе имеются следующие определения констант FALSE (ЛОЖЬ) и TRUE (ИСТИНА):
0 CONSTANT FALSE -1 CONSTANT TRUE
CONSTANT xxx ( n -- ) Создание константы с именем xxx и xxx: ( -- n) значением n. Слово xxx при своем выполнении заносит в стек n. FALSE ( -- f) Занесение в стек логического значения ложь ( 0 ). TRUE ( -- t) Занесение в стек логического значения истина ( —1 ).