Данные

Принято различать два вида представления данных: константы и переменные.

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

Переменная – это данное, значение которого может меняться в процессе выполнения программы. Переменные всегда имеют имена. Значения переменных устанавливается в операторе присваивания.

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

Стандартные типы данных

На рисунке показаны описания стандартных типов данных в дереве проекта.

image-1648656895804.png

Описания всех типов данных расположены в проекте в библиотеке ‘Системная область’ в разделе ‘Классификация значений’. Стандартные типы находятся непосредственно в папке ‘Стандарты’. В остальных папках размещены производные типы. Для описания стандартного типа данных применяется элемент проекта с типом ‘Базовый класс значения’.

  • STRING (строка)  - это последовательность символов произвольной длины. При вычислении выражений нужный размер строка принимает автоматически.
  • INTEGER (целое) - целое число, положительное, нуль или отрицательное. Может принимать значения от -2’147’483’648 до 2’147’483’647.
  • UNSIGNED (целое без знака) – положительное целое число или нуль. Может принимать значения от 0 до 4’294’967’295.
  • NUMBER (число с дробной частью) - десятичное число с фиксированной дробной частью.  Максимальный размер 24 цифры, включая десятичные. Если в описании не указаны ни число разрядов, ни точность, то устанавливается так называемая ‘плавающая точность’. Плавающая точность означает, что точность числа может изменяться для того, чтобы сохранить как можно больше значащих  цифр после десятичной точки.

Основное преимущество чисел типа number – возможность явного указания десятичной точности результата при выполнении операций.  Это позволяет избежать проблемы накопления ошибок округления. Второе преимущество - большое количество значащих разрядов.

  • DATETIME (дата, время) - дата со временем c точностью до секунды.
  • UID  - уникальный идентификатор объекта базы данных или проектного элемента.
  • BLOB – данные большого объема, хранящиеся в двоичном виде.
  • UIDSET – список уникальных идентификаторов.

Остальные типы данных являются производными от этих стандартных.

Производные типы данных

В проекте описано множество производных типов данных, и этот список постоянно расширяется.

image-1648656914951.png

В папке ‘Объектные’ расположены производные типы, используемые для переменных, содержащих ссылки на объекты БД. Так тип ‘Объект’ может быть использован для любого из объектных типов. Если точно известен объект БД , то лучше применять типы Пользователь, Каталог, Партнер, Продукт, Документ, Строка, Проводка, Протокол, Контрольная точка. Элементы проекта, описывающие эти типы, ссылаются на соответствующие таблицы БД.

Для хранения списков объектов применяются типы, производные от стандартного типа UIDSET.

image-1648656931694.png

В папке ‘Системные’ находится описание типа данных ‘Код объекта БД’. Это строка длиной 20 символов. При описании параметров таблиц коды объектов имеют данный тип.

image-1648656947347.png

В папке ‘Проектные’ перечислены различные типы проектных элементов. Все они произведены от типа UID.

image-1648656963293.png

Папка ‘Данные’ содержит описания типов, с которыми работают внешние редакторы текстов (Word, Excel).

image-1648656978409.png

В папке ‘Числовые’ перечислены различные числовые типы. Типы различаются размером и точностью.

image-1648656993684.png

Строчные типы данных, помещенные в папку ‘Строчные’, различаются только ограничениями на длину (что важно при описании полей БД и при заполнении формы ввода) и форматом отображения колонки в виде просмотра.

image-1648657012694.png

Типы ‘Дата+Время’ и ‘Дата’ отличаются лишь форматом отображения.

image-1648657027706.png

Папка ‘Счета’ содержит типы, выделенные из прочих проектных типов данных.

Ограничения, наложенные на производные типы, влияют на формат создаваемых полей БД, формат отображения данных в колонках видов просмотров и на округление числовых данных при расчетах.

Значение NULL

При выполнении арифметических операций и операций преобразования типов могут происходить ошибки (переполнение, деление на 0 и т.п.). Выполнение программы при этом не должно прерваться, так как такие ошибки не фатальны. Если возникает подобная ошибка, то операция возвращает специальное значение ‘пусто’. 

NULL - специальное значение ‘Пусто’.

Свойства этого значения следующие:

  • такое значение может иметь переменная любого типа;
  • если один из операндов арифметической/логической операции имеет значение NULL, то результат операции тоже будет NULL;
  • NULL значение меньше любого значения, как строкового, так и числового;
  • В булевских выражениях NULL означает FALSE.

Разработчики нередко используют NULL значение  в качестве результата выполнения функций.

В ДОМИНО понятие NULL значения привнесено из SQL. В SQL значение NULL означает отсутствие значения поля, и NULL-значение может размещаться в поле любого типа.

Преобразование типов данных

Если операция производится над данными разных типов, то производится автоматическое преобразование данных к одному типу.

Правила преобразования типов следующие:

  • В операторе присваивания
    • значение, записываемое в переменную, преобразовывается к типу переменной;
  • В арифметических операциях
    • строки всегда преобразовываются к числу;
    • Числа разных типов преобразовываются по правилу:

[число] операция [целое] ->> [число]

[целое] операция [число] ->> [целое]

  • Если (хотя бы) один из операндов имеет значение NULL, то результатом операции будет NULL;
  • В операции конкатенации (&)
    • оба операнда преобразуются к строковому типу;
  • В операциях сравнения
    • при сравнении строки с числом строка преобразуется к числу;
    • при сравнении строки со строкой преобразование не производится;
    • значение NULL считается меньше любого другого значения.