Axiom Справочник языка

Глава 2 · Переменные и значения

Переменные, константы и значения

Во время выполнения программы накапливаются промежуточные результаты: счётчик доходит до нужного числа, сумма растёт с каждым слагаемым, введённый текст ждёт обработки. Чтобы обращаться к таким данным по имени, служит переменная. Константа устроена похоже, но её значение защищено от присваивания. В обоих случаях важны тип данных и область видимости: они определяют, какие значения допустимы и откуда к имени можно обратиться.

Объявление и присваивание

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

DIM count AS INTEGER = 2
count = count + 1
PRINT count

Программа выводит:

3

В правой части count + 1 читается прежнее значение счётчика, после чего результат записывается в ту же переменную, то есть вычисление всегда предшествует записи. Само присваивание не объявляет имя, поэтому запись count = 2 без предшествующего объявления приводит к диагностике MB2001 «Имя 'count' не объявлено».

Тип данных и начальное значение

Имя само по себе не говорит, что именно хранится в переменной. Это определяет тип: он ограничивает набор значений и операции, которые к ним применимы. Для целых чисел предназначен INTEGER, для текста — STRING, для значений истинности — BOOLEAN. Явный тип записывается после AS:

DIM title AS STRING = "Отчёт"
DIM price AS DOUBLE = 12.5
DIM ready AS BOOLEAN = TRUE
PRINT title
PRINT price
PRINT ready

Программа выводит:

Отчёт
12.5
TRUE

Значение после знака = вычисляется при выполнении объявления и становится начальным значением переменной; вычисляющее его выражение называют инициализатором. Если тип указан, инициализатор можно опустить: DIM count AS INTEGER создаёт переменную со значением 0.

Если начальное выражение задано, явное указание типа можно опустить:

DIM count = 3
PRINT count

Программа выводит:

3

Здесь компилятор выводит тип INTEGER из литерала 3; такой приём называют выводом типа. Опустить одновременно тип и начальное значение нельзя. Полные формы объявления и значения по умолчанию приведены в статье DIM.

Константы

Величина, известная до запуска и не меняющаяся по ходу работы, оформляется как константа: имя связывается со значением, которое программа не может переписать. Для этого служит CONST, требующий явного типа и начального выражения. Имя константы участвует в вычислениях наравне с переменной; в следующем примере LIMIT задаёт предел для проверки количества:

CONST LIMIT AS INTEGER = 10
DIM count AS INTEGER = 7
PRINT count <= LIMIT

Программа выводит:

TRUE

В выражении имя LIMIT обозначает число 10, поэтому сравнение даёт TRUE. Именно запрет присваивания отличает константу от переменной: инструкция LIMIT = 20 отклоняется с диагностикой MB2010 «Нельзя присваивать значение константе». Правила вычисления начального значения и ограничение передачи через BYREF описаны в статье CONST.

Язык уже объявляет константы PI, ROW и COLUMN; их значения приведены на той же странице.

Области видимости

Имя переменной действует не по всему тексту программы, а только в своей области видимости — той части исходного текста, где обращение к объявлению разрешено. Переменная, объявленная внутри ветви IF, после END IF уже недоступна. Кроме того, имена не зависят от регистра: count и Count обозначают одну переменную. Подробные правила и примеры находятся в статье об именах и областях видимости.

Обычные переменные объявляются оператором DIM. Некоторые конструкции объявляют имена самостоятельно: заголовок подпрограммы — параметры, FOR — счётчик цикла, CATCH — переменную со сведениями об ошибке. Например, для CATCH err не нужно предварительно писать DIM err; см. объявление в CATCH.

Статьи раздела

  • DIM — отдельные и групповые объявления, массивы и начальные значения.
  • Присваивание — изменение переменной, элемента массива или поля.
  • CONST — константы и предопределённые значения.
  • Карта типов — какие данные можно хранить и где описан каждый тип.
  • BOOLEAN — логические значения TRUE и FALSE.
  • Массивы — хранение нескольких элементов одного типа.

См. также