Строковые операторы (+, CONCAT)
Строковые операторы - операторы, параметрами и результатом которых являются свойства, значения которых являются экземплярами строковых классов. В платформе на данный момент поддерживаются следующие строковые операторы:
| Оператор | Название | Описание | Пример | Результат |
|---|---|---|---|---|
+, CONCAT | Объединение | Возвращает строку, полученную объединением строк операндов | 'a' + 'b' | 'ab' |
Оператор + возвращает NULL, если один из операндов NULL. Для оператора CONCAT значение NULL в операнде эквивалентно пустой строке (но объединение операндов, все из которых равны NULL, все равно возвращает NULL); операнды при этом соединяются разделителем, который вставляется только между операндами, не равными NULL. Например CONCAT ' ', 'John', 'Smith' = 'John Smith', а CONCAT ' ', 'John', NULL = 'John'.
Определение класса результата
Класс результата определяется как:
| Оператор | Описание |
|---|---|
+, CONCAT | result = STRING[p1.blankPadded AND p2.blankPadded, p1.caseInsensitive OR p2.caseInsensitive, p1.length + p2.length] |
где blankPadded, caseInsensitive и length определяются аналогично правилам построения общего предка для двух встроенных классов (семейство - Строки). Для CONCAT длина результата также включает разделитель, вставляемый между операндами.
В операторе + операнды, классы которых отличны от строк, приводятся к строкам в соответствии со следующей таблицей:
| Класс | Приведенный класс |
|---|---|
DATE, DATETIME, TIME | STRING[25] |
NUMERIC | STRING[p.length] |
LOGICAL | STRING[1] |
FILE | TEXT |
| Объект | STRING[10] |
| Остальные | STRING[8] |
Если какой-либо операнд принадлежит классу строк неограниченной длины TEXT (или одному из его вариантов, например форматированному или HTML-тексту), результатом является этот текстовый класс, а не строка фиксированной длины.
Язык
Оператор суммирования объединяет строки, когда хотя бы один операнд является строкой — см. арифметические операторы.
Для объединения нескольких значений с разделителем, вставляемым только между операндами, не равными NULL, используется оператор CONCAT.
Примеры
CLASS Person;
firstName = DATA STRING[100] (Person);
middleName = DATA STRING[100] (Person);
lastName = DATA STRING[100] (Person);
// если какая-то часть имени не задана, то эта часть будет пропущена вместе с пробелом
fullName(Person p) = CONCAT ' ', firstName(p), middleName(p), lastName(p);