Saída e registro de logs

Saída de console

Write / WriteLn

Para exibir cadeias de caracteres em Pascal, use os procedimentos nativos Write ou WriteLn; WriteLn adiciona automaticamente uma quebra de linha no final do texto.

Trata-se de um procedimento nativo muito flexível no Pascal: aceita uma quantidade ilimitada de argumentos de qualquer tipo de dado, converte valores para cadeia automaticamente ao imprimir e suporta uma sintaxe de formatação especial para controlar a largura de preenchimento numérico e a precisão de números de ponto flutuante.

WriteLn('Hello world!');

// Exibir expressão inteira
WriteLn('You can output an integer: ', 3 * 4);

// Inteiro alinhado à direita com largura total de 10 caracteres
WriteLn('You can pad an integer: ', 666:10);

// Formato de ponto flutuante: largura total 1, 4 casas decimais
WriteLn('You can output a float: ', Pi:1:4);Code language: JavaScript (javascript)

Quebras de linha manuais

Constante LineEnding

Se precisar inserir uma quebra de linha manual dentro de uma única cadeia, utilize a constante LineEnding da biblioteca padrão Free Pascal; o Castle Game Engine também disponibiliza a constante abreviada NL.

As cadeias Pascal não interpretam sequências de escape com barra invertida (\n não tem efeito). O exemplo abaixo está incorreto:

// Errado: \n não é reconhecido como quebra de linha
WriteLn('One line.\nSecond line.');Code language: JavaScript (javascript)

Duas formas corretas:

// Concatenar constante de quebra de linha
WriteLn('One line.' + LineEnding + 'Second line.');

// Duas chamadas separadas de WriteLn (mais limpo e recomendado)
WriteLn('One line.');
WriteLn('Second line.');Code language: JavaScript (javascript)

Observações importantes

WriteLn só funciona em aplicativos de console

Write/WriteLn só funcionam em aplicativos de console. Você deve declarar a diretiva de compilação no início do arquivo principal do programa:

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

Não utilize o modo GUI:

{$apptype GUI} // Chamar WriteLn diretamente em programas GUI causará errosCode language: PHP (php)
  • Unix/Linux/macOS: em alguns cenários programas GUI não travam ao imprimir, mas a saída não tem utilidade;
  • Windows: executar WriteLn diretamente em aplicativos gráficos GUI dispara erros de tempo de execução.

Padrões de log do Castle Game Engine

Ao desenvolver com o Castle Game Engine, não use WriteLn diretamente para mensagens de depuração. Utilize as funções de log dedicadas:

  • WriteLnLog: logs de depuração comuns
  • WriteLnWarning: logs de aviso

O motor redireciona automaticamente os logs para os destinos correspondentes:

  1. Sistemas Unix: saída de console padrão stdout;
  2. Jogos GUI do Windows: gravação em arquivos de log locais;
  3. Plataforma Android: integração com logs do sistema Android, visualizável via adb logcat.

Tabela de correspondência de termos

Termo original em inglêsSignificado em Pascal
Write / WriteLnSaída sem quebra de linha / Saída com quebra de linha
LineEndingConstante de quebra de linha do sistema (multiplataforma)
NLConstante abreviada de quebra de linha do Castle
paddingPreenchimento de campos numéricos, largura de alinhamento
precisionPrecisão decimal de números de ponto flutuante
{$apptype CONSOLE}Diretiva de compilação para aplicativos de console
{$apptype GUI}Diretiva de compilação para aplicativos gráficos
adb logcatFerramenta de visualização de logs Android
standard outputFluxo de saída padrão (stdout)

Exemplo completo desta seção

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

begin

  WriteLn('Hello world!');

  // Exibir expressão inteira
  WriteLn('You can output an integer: ', 3 * 4);

  // Inteiro alinhado à direita com largura total de 10 caracteres
  WriteLn('You can pad an integer: ', 666:10);

  // Formato de ponto flutuante: largura total 1, 4 casas decimais
  WriteLn('You can output a float: ', Pi:1:4);

  // Errado: \n não é reconhecido como quebra de linha
  // WriteLn('One line.\nSecond line.');

  // Concatenar constante de quebra de linha
  WriteLn('One line.' + LineEnding + 'Second line.');

  // Duas chamadas separadas de WriteLn (mais limpo e recomendado)
  WriteLn('One line.');
  WriteLn('Second line.');

end.Code language: PHP (php)

Lembre-se de adicionar a diretiva de compilação acima para funcionar corretamente

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *