Руководство разработчика

Копирующее присваивание

Присваивание — значение операнда справа от знака равно присваивается левому операнду, правый операнд копируется в левый операнд. Оператор присваивания сохраняет значение правого операнда в операнде, указанном слева от знака равно.

Синтаксис:

<переменная> = <выражение>

В качестве переменной могут выступать глобальные и локальные переменные, элементы контейнерных переменных или поля объектов. Тип переменной должен соответствовать типу выражения. Для стандартных типов это означает точное соответствие, а для объектных типов соответствие подразумевает принадлежность к одной ветви иерархии типов. Иными словами, допускается присваивание значений производных типов базовым и наоборот. В обоих случаях копируются значения полей базового типа. А во втором случае поля, которых нет в базовом типе, принимают значения по умолчанию. При присваивании выражения новой переменной ее тип определяется типом выражения. Иногда компилятор не может определить тип выражения и тип переменной остается неопределенным. Такой ситуации следует избегать, применяя ключевое слово ПЕРЕМ и явное указание имени типа.

Пример:

ТИП А
[
  ЧИСЛО: x,y;
]
ТИП Б(A)
[
  ЧИСЛО: z = 100;
]
ВЫЧИСЛИТЬ
  обА = А[ x = 4, y = 6 ]
  обБ = Б[ x = 1, y = 3, z = 1 ]
  обА = обБ // обА: x = 1, y = 3
  обБ = обА // обБ: x = 1, y = 3, z = 100
КОНЕЦ

Оператор присваивания для контейнерных переменных удаляет все элементы контейнерной переменной, которой производится присваивание и добавляет элементы из другой контейнерной переменной или контейнерной константы. Требуется соответствие размерностей и типов индексов и элементов. При большом количестве удаляемых или добавляемых элементов выполнение оператора присваивания может занимать значительное время.

Синтаксис:

<контейнерная переменная> = <контейнерная переменная или контейнерная константа>

Пример:

ВЫЧИСЛИТЬ
  ПЕРЕМ СТРОКА: x2[ЦЕЛОЕ]
  x2 = (1: "Да", 2: "Нет")
  ПЕРЕМ x1 = x2
КОНЕЦ

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

Синтаксис:

<обработчик> = <обработчик или константа обработчика>

См. также: