Глава 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.
- Массивы — хранение нескольких элементов одного типа.