Начальный курс программирования на языке Форт


КОНСТАНТЫ


Если в переменных обычно хранятся значения, которые могут изменяться, то константы используются для хранения значений, которые изменению не подлежат. На Форте мы создаем константу и тут же устанавливаем ее значение, например:

220 CONSTANT ПРЕДЕЛ

Здесь определена константа с именем ПРЕДЕЛ, которой присвоено значение 220. Теперь мы имеем право подставлять слово ПРЕДЕЛ вместо значения

: ?ЖАРКО ( температура -- ) ПРЕДЕЛ > IF ." Опасно — Уменьшите нагрев ! " THEN ;

В том случае, когда число в стеке больше 220, выдается предупреждающее сообщение. Заметьте, что, говоря ПРЕДЕЛ, мы получаем значение, а не адрес. Нам здесь не требуется «выборка». В этом и состоит основное отличие переменных от констант. Дело в том, что при работе с переменной нам нужен адрес, чтобы иметь возможность как выборки значения, так и его запоминания. При использовании же константы всегда требуется значение (мы ни-когда в нее ничего не запоминаем).

Одним из примеров применения констант может служить именование аппаратного адреса. Допустим, что программа для управления фотокамерой с помощью микропроцессора содержит следующее определение:

: СНИМОК ЗАТВОР ОТКРЫТЬ БРЕМЯ ВЫДЕРЖАТЬ ЗАТВОР ЗАКРЫТЬ ;

Здесь слово ЗАТВОР определено как константа при условии, что его выполнение обеспечивает аппаратный адрес затвора фотокамеры. Оно может быть определено так:

HEX ЗЕ27 CONSTANT ЗАТВОР DECIMAL

Слова ОТКРЫТЬ и ЗАКРЫТЬ могут быть просто определены:

: ОТКРЫТЬ ( а -- ) 1 SWAP ! ; : ЗАКРЫТЬ ( а -- ) 0 SWAP ! ;

так что выражение ЗАТВОР ОТКРЫТЬ запишет единицу по адресу затвора, и он откроется.

Использование в определениях констант, а не изображений самих чисел является важным элементом хорошего стиля программирования. Прежде всего наличие констант делает вашу программу более читабельной. Все определения Форта должны быть так же самодокументированы, как определение СНИМОК.

Не менее существенно и то, что значения могут изменяться (могут изменяться, к примеру, аппаратные средства).


Начало  Назад  Вперед