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