Axiom Справочник языка

Справочная статья

Строковые литералы и интерполяция

Готовый текст записывается в программе строковым литералом, а если в него нужно вставить вычисленное значение — интерполированной строкой. Оба вида дают выражение типа STRING, но подчиняются разным правилам записи: в обычном литерале текст берётся как есть, в интерполированном часть строки вычисляется и подставляется в результат.

Кавычки и пустая строка

Обычный литерал заключается в двойные кавычки, а две кавычки внутри литерала обозначают одну кавычку в результате. Пустой литерал записывается как "". На следующую физическую строку обычный литерал не продолжается.

PRINT "Он сказал ""Привет""."

Результат:

Он сказал "Привет".

Вставка выражения

Интерполированная строка начинается с $". Неизменяемые части текста задаются прямо, а вычисляемая вставка записывается в фигурных скобках и может иметь любой тип, для которого доступно обычное отображение. Выражение вычисляется по общим правилам, и его результат становится частью строки. Одиночная открывающая скобка в тексте начинает вставку, поэтому буквальная скобка записывается удвоенной; подробности — в следующем разделе.

$"<текст>{<выражение>}<текст>"

Вставка может содержать другую интерполированную строку, в том числе в аргументе функции. Внутренняя строка вычисляется как отдельное выражение, и её окончание возвращает разбор во внешнюю вставку:

PRINT $"a{$"b{1}c"}d"
PRINT $"{LEN($"x{2}")}"

Результат:

ab1cd
2

Форматирование программы в стилях Classic и Modern сохраняет текст внешней и внутренней строк, выражения, числовые форматы и выравнивание.

Текст внутри интерполяции

Текстовая часть интерполированной строки подчиняется собственным правилам записи. Открывающая фигурная скобка начинает вставку, поэтому одиночная скобка в тексте записывается удвоенной: {{ даёт {. Закрывающая скобка записывается так же: }} даёт }. Двойная кавычка внутри интерполяции записывается двумя кавычками, как и в обычном литерале: "" даёт ".

PRINT $"{{x}}"      ' {x}
PRINT $"a""b"      ' a"b
PRINT $"e{{f"      ' e{f
PRINT $"g}}h"      ' g}h

Обратная косая черта не является экраном и выводится как есть: $"c\d" даёт c\d. Запись \{ экраном не считается, поэтому после обратной косой черты начинается вставка выражения.

Интерполированная строка, как и обычный литерал, не продолжается на следующей физической строке. Перевод строки внутри $"…" завершает литерал и вызывает ошибку MB0002 с позицией начала строки; последующие строки программы читаются как обычный код.

Формы вставки

Вставка записывается в четырёх видах: только выражение, выражение с выравниванием, выражение с числовым форматом и обе части вместе.

{<выражение>}
{<выражение>,<выравнивание>}
{<выражение>:<формат>}
{<выражение>,<выравнивание>:<формат>}

Выравнивание — целочисленный литерал минимальной ширины поля: положительное значение дополняет поле слева, отрицательное справа, а длинный результат не обрезается. Ширина измеряется в единицах UTF-16. Числовой формат применяется первым, выравнивание — после него.

Пробелы по краям спецификатора формата не значимы: записи {n:F2}, {n: F2} и {n:F2 } дают одинаковый результат. Пробел после запятой относится к записи выравнивания, а не к формату.

Числовые форматы

ФорматНазначение
F, F2Фиксированное количество знаков после десятичной точки.
N, N0Число с разделителями групп разрядов.
E, E3Экспоненциальное представление.
P, P1Процент: значение умножается на 100.
B, B8Двоичное представление целого числа с минимальным количеством цифр.
X, X4Шестнадцатеричное представление целого числа.
D, D3Целое число с минимальным количеством цифр и ведущими нулями.
G, G3Общее числовое представление.

Таблица перечисляет часто используемые форматы; сам формат передаётся числовому форматированию .NET после перевода букв в верхний регистр. Число после буквы уточняет точность или минимальную ширину числовой записи. D, X и B применяются только к INTEGER и LONG, а F, N, E, P и G — к числовым типам. Для нечисловых значений спецификатор игнорируется и используется обычное отображаемое значение.

Правила X/B для отрицательных чисел, ведущие нули и отличие числового значения от записи описаны в статье систем счисления. Неверный числовой формат или применение X/B к дробному типу вызывает перехватываемую ошибку MB3007.

Без формата используется обычное текстовое представление значения. Десятичный разделитель — точка; региональные настройки не меняют результат.

В следующем примере вставки объединяют числовой формат и ширину поля:

DIM count AS INTEGER = 7
DIM price AS DOUBLE = 12.5
PRINT $"Количество: {count:D3}"
PRINT $"Цена: {price:F2}"
PRINT $"Поле: |{count,3}|"

Результат:

Количество: 007
Цена: 12.50
Поле: |  7|

Формат D3 доводит число до трёх цифр ведущими нулями, F2 добавляет второй дробный разряд, а выравнивание шириной 3 дополняет поле слева.

Предельная длина результата

Итоговый текст и ширина поля выравнивания подчиняются пределу STRING в 16 777 216 единиц UTF-16. Превышение вызывает MB3007; ошибку можно обработать через TRY/CATCH.

Диагностика

Незавершённый литерал вызывает MB0002; это относится и к обычному литералу, и к интерполированной строке, которая не закрыта до конца физической строки или до конца файла. Вставленное выражение проверяется по общим правилам имён и типов; неизвестное имя вызывает MB2001, несовместимое использование — MB2003. Недопустимый числовой формат во время выполнения вызывает MB3007 и может быть обработан через TRY/CATCH.

Запускаемые примеры

См. также