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

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

Оператор PRINT

Когда программе нужно показать сообщение или результат вычисления, она передаёт значения оператору PRINT. Оператор превращает их в текст и помещает в консоль или в окно программы. Форма PRINT USING решает более узкую задачу: раскладывает значения по полям форматной строки, задавая ширину поля и вид числа.

Назначение и место вывода

Куда именно попадёт текст, зависит от того, как запущена программа. Пока программа не выбрала экран оператором SCREEN, результат поступает в консоль; после выбора экрана текст отображается в окне программы. При запуске через CLI вывод идёт в стандартный поток вывода. Размещением текста внутри графического экрана управляют средства графической главы, а не PRINT.

Синтаксис

Запись оператора начинается ключевым словом PRINT, за которым идёт необязательный список вывода. Форма с USING добавляет перед этим списком форматную строку. Завершающий разделитель записывается сразу после списка. Ниже перечислены все допустимые формы.

PRINT
PRINT <список вывода>
PRINT <список вывода> ;
PRINT <список вывода> ,
PRINT USING <формат> ; <список вывода>
PRINT USING <формат> ; <список вывода> ;
PRINT USING <формат> ; <список вывода> ,

Список вывода и разделители

Список вывода состоит из одного или нескольких выражений, которые вычисляются слева направо. Разделитель между выражениями определяет только то, что попадёт между значениями: точка с запятой не добавляет символов, запятая добавляет один пробел. Запятая не перемещает вывод в фиксированную экранную зону.

Тот же символ в конце инструкции действует иначе. Завершающий разделитель не разделяет значения, а откладывает перевод строки: следующий вывод продолжит ту же строку. Без завершающего разделителя PRINT заканчивает строку, а пустой PRINT выводит только перевод строки. Несколько строк подряд показывают разницу:

PRINT "Имя: "; "Анна"
PRINT "Курс:", 2
PRINT
PRINT "Готово"

Результат:

Имя: Анна
Курс: 2

Готово

В первой строке точка с запятой соединила подпись и имя без промежуточного символа, поэтому между ними остался только пробел, завершающий саму строку «Имя: ». Во второй строке запятая добавила пробел перед числом. Пустой PRINT создал пустую строку, и слово «Готово» оказалось ниже.

В форме PRINT USING первым идёт выражение типа STRING — форматная строка с маской текстовых и числовых полей.

Представление значения

Обычная форма преобразует значение в отображаемый текст по правилам Axiom. То же скалярное представление даёт соединение через &. Если строка собирается заранее, со вставками и форматированием, применяется интерполяция; её полный договор находится в строковой главе.

PRINT USING

Обычный PRINT выводит значение в его естественном виде. Когда требуется выровнять столбцы чисел или задать точное число дробных разрядов, применяют PRINT USING: он принимает форматную строку и раскладывает по её полям переданные значения. Сначала вычисляется строка формата типа STRING, затем значения подставляются в её поля по порядку. Форматное поле должно соответствовать типу переданного значения.

Строковое полеДействие
!Выводит первый элемент UTF-16 строки; для пустой строки вывод пуст.
&Выводит строку целиком.
\ \Поле фиксированной ширины. Ширина включает обратные косые черты и пробелы между ними.

Числовые маски используют #, 0, ., +, -, ,, $, * и ^. Маска определяет ширину поля и представление числа. Следующая запись задаёт поле шириной шесть знаков, из которых два отведены под дробную часть:

PRINT USING "Итог: ###.##"; 12.5

Результат:

Итог:  12.50

Число заняло пять позиций поля из шести, поэтому перед ним остался один пробел, а дробная часть дополнена нулём до двух разрядов.

В обычной десятичной маске половина округляется от нуля: до 28 дробных разрядов для INTEGER, LONG и DECIMAL и до 15 разрядов для DOUBLE. Более длинная дробная часть маски поддерживается: тогда форматируется исходное значение без предварительного округления до этих пределов, но дополнительные позиции не увеличивают точность исходного типа. Форматная строка ограничена 2048 единицами UTF-16.

Четыре символа ^^^^ задают экспоненциальное представление. Знак показателя сохраняется отдельно от знака числа; INTEGER, LONG и DECIMAL форматируются без промежуточного преобразования в DOUBLE. Так выглядит одна и та же маска на малом и большом значении:

PRINT USING "###.##^^^^"; 0.001
PRINT USING "###.##^^^^"; 1000

Результат:

  1.00E-03
  1.00E+03

Неподходящий тип значения или нехватка значения для числового поля приводят к ошибке форматирования. Для отсутствующего строкового значения поле ! или & выводит пустую строку, а фиксированное поле — пробелы. Лишние значения вычисляются, но в результат не включаются. При переполнении ширины числового поля выводятся знак % и обычное представление исходного числа.

Диагностика

  • MB2003 — выражение формата в PRINT USING не имеет тип STRING.
  • MB3007 — ошибка форматирования PRINT USING: неподходящий тип значения для поля, нехватка значения для числового поля или недопустимая форматная строка.

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

Откройте нужный файл в IDE и запустите его. Примеры с ошибкой предназначены для проверки сообщения компилятора или выполнения.

См. также