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

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

Присваивание

Изменить уже сохранённое значение позволяет присваивание: выражение справа от знака равенства вычисляется, а результат записывается в переменную, элемент массива или поле записи. Тип цели при этом остаётся прежним.

Форма инструкции

<цель> = <выражение>

Слева от знака равенства стоит цель, которая допускает запись: имя переменной, элемент массива или поле записи, например count, items[1], point.X. Выражение справа даёт новое значение, совместимое с типом цели; допустимые преобразования перечислены в статье о преобразованиях типов.

Инструкция допустима на верхнем уровне программы, в подпрограммах и блоках, но нового имени она не вводит: переменная должна быть объявлена заранее, а её имя — доступно в текущей области видимости.

Вычисление до записи

Правая часть вычисляется прежде, чем результат попадёт в цель, поэтому в ней можно использовать прежнее значение той же переменной:

DIM total AS INTEGER = 4
total = total + 3
PRINT total

Результат:

7

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

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

Элементы и поля

Присваивание целого массива записывается с суффиксом [] у обеих массивных переменных: basket[] = fruits[]. Вторая переменная получает независимую копию, включая вложенные изменяемые данные. Явная функция ARRAYCLONE(fruits[]) также создаёт независимую копию. Если справа стоит вызов функции с массивным результатом, достаточно самого вызова: basket[] = MakeFruits().

Запись в отдельный элемент массива требует индекса после имени, запись в поле — имени поля после точки:

TYPE Position
    X AS INTEGER
END TYPE

DIM point AS Position
DIM items[1 TO 2] AS INTEGER
items[1] = 8
point.X = items[1] + 1
PRINT items[1], point.X

Результат:

8 9

Элемент массива принимает значение только при выделенных элементах и индексе в допустимых границах; подробности обращения к элементам и полям приведены в статьях об индексировании массивов и о полях TYPE. Присваивание массива целиком или записи подчиняется правилам копирования и совместного использования памяти, описанным в статьях о массивных представлениях и о пользовательских типах.

Ограничения и другие значения знака равенства

Не всякая цель допускает запись: константа и переменная только для чтения не могут стоять слева от знака равенства. Значения FILE также не присваиваются общей инструкцией — для открытия и закрытия файла предусмотрены OPEN и CLOSE.

Вне инструкции тот же знак = обозначает сравнение. Поэтому PRINT total = 7 выводит TRUE или FALSE и оставляет total без изменения. Запись <поле> := <значение> задаёт значение именованного поля в литерале записи; как инструкция присваивания она не используется.

Диагностика

  • MB2001: цель или выражение обращается к необъявленному либо недоступному имени.
  • MB2003: значение несовместимо с типом цели либо выполняется прямое присваивание FILE.
  • MB2010: цель является константой или доступна только для чтения.
  • MB3005: элементы массива ещё не выделены.
  • MB3002: индекс выходит за границы массива.

Ошибки вычисления правой части описаны в статьях соответствующих операций и функций.

См. также

Тип переменной задаёт DIM, а защищает имя от записи CONST. Какие значения можно записать в цель другого типа, определяют преобразования типов.

Кортежи

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