Преобразование типа
Оператор преобразования типа создает свойство, которое преобразует объект одного встроенного класса к объекту другого встроенного класса. Результат принадлежит целевому встроенному классу. Если преобразование типа невозможно, значением свойства будет 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));