Для вывода и сравнения текста используйте строку. Шаблон с тегом сохраняет вид данных и структуру вставок для пути, регулярного выражения, команды оболочки или SQL.
Посчитайте символы строки
Установите Топаз по разделу Первая программа и сохраните код в strings-templates.tpz.
let название = "Topaz 💎"
let числоСкалярных = название.scalars().length
let путьКонфигурации = p"config/topaz.toml"
let запрос = sql"SELECT name FROM projects WHERE title = {название}"
print("{название}: {числоСкалярных}")В папке с файлом выполните проверку и запуск.
topaz check strings-templates.tpz
topaz run strings-templates.tpzПроверка проходит, программа выводит следующий текст.
Topaz 💎: 7В название семь скалярных значений Unicode, по одному на каждую букву, пробел и эмодзи. Скаляр соответствует одной кодовой точке Unicode для текста. Метод scalars() возвращает Array<string>, в котором каждый элемент содержит один скаляр.
Один видимый символ может состоять из нескольких скаляров, например буквы и следующего за ней комбинируемого знака ударения. Такая видимая единица называется кластером графем. Число скаляров может отличаться от числа видимых символов и байтов хранения.
Топаз сравнивает последовательности скаляров как записано. Одинаково выглядящий текст может оказаться неравным, если последовательности скаляров различаются.
Выберите строку или шаблон
| Задача | Форма | Результат |
|---|---|---|
| Вывести или сравнить текст | "Hello, {name}" | Строка со значением, вставленным по стандартным правилам отображения |
| Записать несколько строк | """...""" | Многострочный текст с описанными ниже правилами пробелов |
| Описать путь | p"config/app.toml" | Шаблон для нормализации пути на выбранной платформе |
| Описать регулярное выражение | r"^[a-z]+$" | Шаблон регулярного выражения с сокращённым экранированием |
| Описать команду оболочки | sh"tool {argument}" | Шаблон, хранящий аргумент отдельно от текста команды |
| Описать запрос SQL | sql"WHERE id = {id}" | Шаблон, хранящий вставленное значение как параметр запроса |
В примере запрос хранит текст SQL отдельно от параметра название. Создание шаблона не выполняет запрос или команду оболочки. Шаблоны регулярных выражений не задают полный единый диалект для всех платформ.
Все четыре тега создают значение встроенного типа template. Указывайте его в аннотациях, например let запрос: template = sql"...". Передавайте в print строку. Интерполяция шаблона в строку выводит описание вроде <sql template, 1 part(s), 0 interpolation(s)>. Она не создаёт исполняемый запрос.
Можно прочитать тег шаблона и его текстовые части. запрос.tag возвращает "sql". запрос.parts возвращает Array<string> с элементами "SELECT name FROM projects WHERE title = " и "". Эти свойства не предоставляют доступ к вставленным значениям.
Вставляйте значения и переносите текст
Запись {expression} вставляет значение выражения в строку. Это называется интерполяцией. Обычные и многострочные строки используют одинаковые управляющие последовательности.
| Запись | Значение |
|---|---|
\n, \t, \r | Перенос строки, табуляция, возврат каретки |
\\, \" | Обратная косая черта, двойная кавычка |
\{, \} | Фигурные скобки как текст |
Тройные кавычки позволяют переносить текст на новую строку. Если закрывающие кавычки стоят на отдельной строке, пробелы и табуляции перед ними задают отступ. Каждая непустая строка должна начинаться с этой точной последовательности. При несовпадении проверка сообщает об ошибке. Табуляции сравниваются как символы.
По правилам языка начальный перенос и отступ закрывающих кавычек удаляются. Публичный интерпретатор 5.20.3 сейчас сохраняет их. Для точного текста в этом интерпретаторе используйте обычную строку с явными управляющими последовательностями, например "one\ntwo\n".
Теги p, r, sh и sql работают и с тройными кавычками. Ставьте тег вплотную к открывающей кавычке. Пробел в p "file" приводит к синтаксической ошибке.
Исправьте неподдерживаемую запись
| Если вы написали | Используйте |
|---|---|
text[0] или text.length | text.scalars()[0] для непустой строки или text.scalars().length |
| Срез строки | Операции Array над text.scalars(), если подходит разделение по скалярам |
Обратные или одинарные кавычки, ${expression} | Двойные кавычки и {expression} |
html"..." или собственный тег | Обычную строку либо один из четырёх поддерживаемых тегов по назначению |
API кластеров графем и синтаксис прямых срезов строк не поддерживаются. Имя template занято встроенным типом, поэтому объявления record template, enum template и newtype template отклоняются.
Правила переноса объясняет раздел Лексика и структура исходного кода, отображение значений описано в разделе Поведение среды выполнения. Другие замены синтаксиса собраны в разделе Запрещённые и отложенные формы.