Gladiston Santana

Pascal: Delphi & Free Pascal

Desenvolvimento robusto, compilado e de alta performance.

Introdução

Ao desenvolver utilitários de linha de comando ou aplicativos de suporte, a capacidade de interpretar argumentos externos é vital. Seja para indicar verbosidade com um sinalizador como verbose ou definir caminhos de arquivos como import=entrada.log, saber capturar esses dados corretamente garante que seu software seja integrável a scripts e automações complexas.

Neste guia, exploraremos métodos eficientes para detectar e validar parâmetros no Delphi e Lazarus, garantindo manutenibilidade e profissionalismo ao seu código.

Lidando com parâmetros de entrada em seu aplicativo

Onde verificar ou ler os parâmetros informados?

O melhor lugar para ler os parâmetros de entrada é logo nas primeiras linhas de execução para que os mesmos possam ser usados antes do processo iniciar-se. No Delphi e no Lazarus, o ponto mais estrito seria o arquivo de Projeto (.dpr ou .lpr), mas muitos preferem fazê-lo no OnCreate do primeiro formulário.

Os parâmetros são obrigatórios ou opcionais?

Muitos programadores criam utilitários que servem de apoio a um programa principal. O aplicativo principal chama esses utilitários via linha de comando para tratar funcionalidades específicas, como processamento de logs. Para isso, é preciso determinar o que é essencial para a execução.

// Exemplo de validação de parâmetros obrigatórios
var
  ErrorMsg: String;
  sParam: String;
  iParamCount: Cardinal;
  bHasImport, bHasExport: Boolean;
  i: Integer;
begin
  iParamCount := ParamCount;
  bHasImport := false;
  bHasExport := false;
  ErrorMsg := '';

  if iParamCount = 0 then
    ErrorMsg := 'Não há parâmetros'
  else
  begin
    for i := 1 to iParamCount do
    begin
      sParam := ParamStr(i);
      if ContainsText(sParam, 'import=') then bHasImport := true;
      if ContainsText(sParam, 'export=') then bHasExport := true;
    end;

    if (ErrorMsg = '') and (not bHasImport) then
      ErrorMsg := 'Falta o parametro import=(...)';
  end;

  if ErrorMsg <> '' then
  begin
    writeln(stderr, ErrorMsg);
    Sleep(5000);
    Halt(2); // Indica falha ao chamador
  end;
end;

Lendo, validando e processando

O uso de TStringList facilita muito a gestão de pares "chave=valor". Ao carregar os parâmetros em uma lista, podemos usar métodos como IndexOfName e Values para acessar os dados de forma elegante.

Criando utilitários no Linux e Windows

Se estiver usando Lazarus/FPC, tome cuidado com dependências de ambiente gráfico. Para criar utilitários puros, vá em Project Options -> Compiler Options -> Config and Target e mude o LCL widgetset para nogui.

No Linux, após compilar seu utilitário, lembre-se de definir as permissões antes da execução:

chmod +x meuutilitario
./meuutilitario import=entrada.log export=saida.csv
Configuração de Widgetset para NOGUI no Lazarus

Ecoando mensagens no terminal

No Windows, para que as mensagens de WriteLn apareçam no console sem abandonar a IDE durante o desenvolvimento, desligue a opção Win32 gui application (-WG) nas opções do compilador.

Configuração de Win32 GUI Application

Aprofunde seu conhecimento: Assista a uma demonstração prática sobre o uso da unit CustApp para simplificar parâmetros.

▶ Ver Código e Demos no GitHub

Conclusão

Dominar o tratamento de parâmetros de entrada transforma scripts simples em ferramentas profissionais e robustas. Ao implementar validações rigorosas e garantir que seu utilitário comunique erros via Exit Codes, você facilita a integração com sistemas de terceiros e automações de infraestrutura, seja no Windows ou no Linux.