Строковые литералы поддерживают интерполяцию строк. Интерполяция строк — это процесс вычисления значения строкового литерала, включающего одно или несколько выражений интерполяции.
Интерполяцию строк можно рассматривать как удобный и понятный синтаксис для конкатенации строк, совмещенный с возможностями форматирования значений выражений.
Другими словами, интерполяция строк позволяет вставлять значения переменных в строки.
Синтаксис
Поддерживаются следующие варианты синтаксиса выражения интерполяции:
Для обоих вариантов краткого синтаксиса (%имя-переменной
и $имя-переменной
):
имя-переменной
— это последовательность символов, образующая допустимое имя переменной.
- Символ после
имя-переменной
не должен быть буквой, цифрой или знаком подчеркивания.
- Указанное
имя-переменной
должно быть доступно в текущей области видимости.
Например, в выражении %Переменная.Поле
имя переменной — это Переменная. Это выражение эквивалентно %{Переменная}.Поле
.
Интерполяция с форматированием
Форматная строка формат в выражении интерполяции допустима, только если результат вычисления выражения имеет тип, одним из предков которого является тип Форматируемое
.
Форматная строка отделяется от выражения символом |
(вертикальная черта). Содержимое форматной строки определяется типом выражения.
Примеры использования интерполяции
знч Стр_Значение = Истина
знч Стр_Дата = {2024-12-11}
знч Стр_Конкат = "" + Стр_Значение
знч Стр_Интер1 = "%Стр_Значение"
знч Стр_Интер2 = "$Стр_Значение"
знч Стр_Интер3 = "%{Стр_Значение}"
знч Стр_Интер4 = "${Стр_Значение}"
знч Стр_Интер5 = "${Стр_Дата|дд}"
знч Стр_Интер6 = "${Стр_Дата|дд ММММ гггг, дддд}"
Экранирование выражений интерполяции
Если в строковом литерале имеются сочетания символов, не являющиеся выражениями интерполяции, но подходящие под синтаксис выражений интерполяции, нужно экранировать в них первый символ (%
или $x
), добавив впереди символ (\
):
знч Экр1 = "http://ya.ru?\$search=text,&\$max=100"
знч Экр2 = "Где имя типа \"\%Тест\%\""
знч Экр3 = "\%{}"
знч Экр4 = "\${}"
Последовательности символов %x
и $x
, где x
— это любой символ, кроме букв и символа {
, не нуждаются в экранировании, так как не подходят под синтаксис выражений интерполяции. Например, в следующих примерах экранирование не требуется:
знч Стр1 = "%0"
знч Стр2 = "$0"
знч Стр3 = "50% заряда"
знч Стр4 = "цена 10$"
Обработка значения «Неопределено»
Если значение вычисляемого при интерполяции выражения или переменной — это Неопределено
, то результатом интерполяции будет пустая строка. Если в выражении интерполяции задана форматная строка, то она может быть любой: ее значение игнорируется.
При конкатенации со строкой значение Неопределено
преобразуется не в пустую строку, а в строку "undefined"
.
Формирование результирующей строки при интерполяции
При использовании интерполяции нужно помнить, что формирование результирующей строки происходит в момент создания строки, включающей выражения интерполяции.
Покажем это на примере:
метод ПриветствоватьПользователя()
область
пер ИмяПользователя: Строка
пер Приветствие = "Привет, %ИмяПользователя!"
ИмяПользователя = "Ипполит"
;
область
пер ИмяПользователя: Строка
ИмяПользователя = "Ипполит"
пер Приветствие = "Привет, %ИмяПользователя!"
;
;
В данном примере вариант 1 не позволит получить нужный результат. В переменную Приветствие
будет записана строка Привет, !
. Это произойдет потому, что переменная Приветствие
будет создана в момент, когда переменная ИмяПользователя
заполнена значением по умолчанию (а это пустая строка). То, что будет присвоено в переменную ИмяПользователя
после создания переменной Приветствие
, уже не повлияет на значение переменной Приветствие
.
А вариант 2 приведет к желаемому результату. Переменной Имя пользователя
присваивается значение Ипполит
, и только после этого создается переменная Приветствие
со значением Привет, Ипполит!
.
Использование в многострочных литералах
Выражения интерполяции могут использоваться в многострочных литералах. При этом выражения интерполяции могут содержать переносы строк, и эти переносы не включаются в формируемое значение результирующей строки.