Вывод и логирование

Вывод в консоль

Write / WriteLn

Для вывода строк в Pascal используйте встроенные процедуры Write или WriteLn; WriteLn автоматически добавляет перевод строки в конец текста.

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

WriteLn('Hello world!');

// Вывод целочисленного выражения
WriteLn('You can output an integer: ', 3 * 4);

// Выравнивание целого числа по правому краю, общая ширина 10 символов
WriteLn('You can pad an integer: ', 666:10);

// Формат дробного числа: общая ширина 1, 4 знака после запятой
WriteLn('You can output a float: ', Pi:1:4);Code language: JavaScript (javascript)

Ручной перевод строк

Константа LineEnding

Если нужно вручную вставить перевод строки внутри одной строки, используйте константу LineEnding из стандартной библиотеки Free Pascal; в Castle Game Engine есть более короткая константа-псевдоним NL.

Строки Pascal не обрабатывают escape-последовательности с обратной косой чертой (\n не работает). Ниже приведён неверный пример:

// Ошибка: \n не распознаётся как перевод строки
WriteLn('One line.\nSecond line.');Code language: JavaScript (javascript)

Два правильных варианта записи:

// Конкатенация константы перевода строки
WriteLn('One line.' + LineEnding + 'Second line.');

// Два отдельных вызова WriteLn (чище и рекомендуется)
WriteLn('One line.');
WriteLn('Second line.');Code language: JavaScript (javascript)

Важные замечания

WriteLn работает только в консольных приложениях

Write/WriteLn действуют только в консольных приложениях. В начале основного файла программы обязательно указывайте директиву компилятора:

{$apptype CONSOLE}Code language: PHP (php)

Не используйте режим GUI:

{$apptype GUI} // Прямой вызов WriteLn в GUI-программах вызовет ошибкуCode language: PHP (php)
  • Unix/Linux/macOS: в некоторых случаях GUI-программы не падают при выводе, но вывод не несёт смысла;
  • Windows: прямой запуск WriteLn в графических GUI-приложениях вызывает ошибку во время выполнения.

Стандарты логирования Castle Game Engine

При разработке на Castle Game Engine запрещено использовать WriteLn напрямую для отладочных сообщений. Используйте специализированные функции логирования:

  • WriteLnLog: обычные отладочные логи
  • WriteLnWarning: предупреждающие логи

Движок автоматически перенаправляет логи в соответствующие выходы:

  1. Системы Unix: стандартный консольный вывод stdout;
  2. Игры с GUI на Windows: запись в локальный файл логов;
  3. Платформа Android: интеграция с системными логами Android, просмотр через adb logcat.

Таблица соответствия терминов

Оригинальный английский терминЗначение на Pascal
Write / WriteLnВывод без перевода строки / Вывод с переводом строки
LineEndingСистемная константа перевода строки (кроссплатформенная)
NLСокращённая константа перевода строки Castle
paddingЗаполнение числовых полей, ширина выравнивания
precisionТочность дробной части для чисел с плавающей точкой
{$apptype CONSOLE}Директива компилятора для консольных приложений
{$apptype GUI}Директива компилятора для графических приложений
adb logcatУтилита для просмотра логов Android
standard outputСтандартный поток вывода (stdout)

Полный пример из раздела

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
{$R+}

begin

  WriteLn('Hello world!');

  // Вывод целочисленного выражения
  WriteLn('You can output an integer: ', 3 * 4);

  // Выравнивание целого числа по правому краю, общая ширина 10 символов
  WriteLn('You can pad an integer: ', 666:10);

  // Формат дробного числа: общая ширина 1, 4 знака после запятой
  WriteLn('You can output a float: ', Pi:1:4);

  // Ошибка: \n не распознаётся как перевод строки
  // WriteLn('One line.\nSecond line.');

  // Конкатенация константы перевода строки
  WriteLn('One line.' + LineEnding + 'Second line.');

  // Два отдельных вызова WriteLn (чище и рекомендуется)
  WriteLn('One line.');
  WriteLn('Second line.');

end.Code language: PHP (php)

Обязательно добавьте указанную директиву компилятора для корректной работы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *