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

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

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

Поддерживаемые преобразования

Какие преобразования имеют смысл, зависит от семейств встроенных классов, к которым принадлежат исходный и целевой классы:

  • В пределах семейства чисел значение сохраняется настолько, насколько это допускает целевой класс; если значение не помещается в целевой класс, результатом является NULL.
  • Между числами и строками значение преобразуется между числовой и текстовой формами; если исходную строку нельзя прочитать как число целевого класса, результатом является NULL.
  • Строки также преобразуются в классы JSON, JSONTEXT, XML и HTML и обратно.

Строковые и файловые типы

Строковые типы можно преобразовывать в файловые human-readable типы (CSVFILE, XMLFILE, JSONFILE, HTMLFILE и т.д.), и наоборот - файловые human-readable типы можно преобразовывать в строковые типы. Файл конкретного типа также можно преобразовать в файл динамического типа (FILE, NAMEDFILE) и обратно с сохранением содержимого файла; файл динамического типа дополнительно несёт расширение, а NAMEDFILE — ещё и имя.

к сведению

Преобразовывать файлы динамического типа (FILE) к строкам и наоборот в текущей реализации запрещено, но, при необходимости, это можно сделать через промежуточный human-readable тип - то есть преобразовать сначала, к примеру, к CSVFILE, а уже потом к FILE (при этом у результирующего файла будет расширение csv)

Неявные преобразования

Помимо явного оператора преобразования, платформа в ряде случаев преобразует значение к другому классу неявно, без написанного разработчиком преобразования:

  • Когда объединяются значения разных, но совместимых классов — при сложении или вычитании (см. арифметические операторы), в операторах выбора или в операторах экстремума — каждое значение преобразуется к их общему предку, который становится классом результата; в частности, так расширяются числовые классы (INTEGER, объединённый с NUMERIC, становится этим NUMERIC).
  • При объединении строк операнд, не являющийся строкой, преобразуется к строке.
  • Когда значение записывается в свойство другого, но совместимого класса, оно преобразуется к этому классу.
  • Файл конкретного типа преобразуется к файлу динамического типа (FILE, NAMEDFILE) неявно — например, при импорте данных без указания формата или при взаимодействии с внешней системой; результирующее расширение определяется так же, как при явном преобразовании.

Язык

Для реализации преобразования используется оператор преобразования типа.

Примеры

itemCount = DATA INTEGER (Store);
itemCountToString(s) = BPSTRING[10](itemCount(s));

barcode = DATA STRING[15] (Item);
longBarcode(Item i) = LONG(barcode(i));