Перейти к основному содержимому
Версия: 7.0

Свойства

Свойство - это элемент системы, который принимает на вход набор объектов (параметров) и возвращает ровно один объект (возвращаемое значение).

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

Первичные и вычисляемые свойства​

Свойства делятся на первичные и вычисляемые. Значения первичного свойства хранятся и изменяются действиями. Значения вычисляемого свойства получаются по правилу оператора, создавшего свойство, — как правило, из значений других свойств — и хранятся, только если свойство материализовано. Некоторые вычисляемые свойства тоже можно изменять.

Отсутствие значения​

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

Классы значения и параметров​

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

Список классов параметров свойства называется его сигнатурой. Классы параметров задаются при объявлении свойства, а если класс параметра не задан — выводится из определения свойства. Класс параметра может остаться и неопределённым. Сигнатура служит прежде всего для поиска свойства. Сам по себе класс параметра не всегда ограничивает объекты, на которых у свойства есть значение: это зависит от оператора, создавшего свойство. Например, классы параметров первичного свойства обязательно заданы, и если хотя бы один объект набора не принадлежит классу своего параметра, значение равно NULL.

Количество параметров свойства фиксировано. Свойство может и не иметь параметров.

Язык​

Свойство объявляется инструкцией =: она задаёт имя свойства, его параметры и оператор, создающий свойство.

Примеры​

CLASS Item;

// свойство сопоставляет каждому Item значение, хранимое в базе
price (Item i) = DATA NUMERIC[14,2] (Item);

// свойство может вычисляться через другие свойства
// для товара без цены price(i) равно NULL, поэтому и priceWithVAT(i) равно NULL
priceWithVAT (Item i) = price(i) * 1.20;

// свойство может не иметь параметров
defaultVAT = DATA NUMERIC[6,2] ();