A linguagem Delphi (Object Pascal) possui um histórico de quase 30 anos, abrangendo desde o lendário Delphi 7 até o moderno Delphi 13. Essa longevidade é uma faca de dois gumes para a Inteligência Artificial: o conjunto de dados de treinamento contém tanto código legado (ANSI strings, ponteiros manuais) quanto código moderno (Generics, Inline Variables, métodos anônimos).
Sem uma Engenharia de Prompt precisa, a IA tende a alucinar, misturando sintaxes incompatíveis ou sugerindo componentes que não existem na sua instalação. Este artigo detalha como estruturar seus pedidos para obter código limpo, seguro e compilável.
O Contexto Temporal: Especificando a Versão do Compilador
O erro mais comum ao pedir código Delphi é assumir que “Delphi” é uma entidade única. As diferenças sintáticas e de biblioteca entre as versões são massivas.
O Problema
Se você pedir “Crie uma lista de strings”, a IA pode lhe dar um TStringList (clássico) ou um TList<string> (Genérico). Se você estiver no Delphi 7, o código com Generics não compilará. Se estiver no Delphi Alexandria, usar TStringList para tudo pode ser considerado débito técnico.
A Técnica de Prompt
Sempre inicie seu prompt definindo a “Era do Compilador”.
- Para código Legado: “Atue como um especialista em Delphi 7. Use apenas sintaxe compatível com ANSI Strings e evite Generics.”
- Para código Moderno: “Atue como um sênior em Delphi 11 Alexandria ou superior. Utilize Generics, Inline Variables e inferência de tipos sempre que possível.”
Exemplo Prático:
Prompt Ruim: “Como faço um loop numa lista?”
Prompt Bom: “Estou usando Delphi 10.4 Sydney. Escreva um loop
for-inpara iterar sobre umTObjectList<TPerson>. O código deve compilar nesta versão específica.”
O Ecossistema: RTL/VCL vs. Componentes de Terceiros
O Delphi é famoso por sua vasta gama de componentes (JEDI, TMS, DevExpress). No entanto, a IA frequentemente sugere soluções baseadas em bibliotecas que você pode não ter instaladas, resultando no erro File not found: ‘Jv….dcu’.
O Problema
A IA tenta resolver o problema da forma mais fácil encontrada no seu dataset. Muitas vezes, a solução mais fácil envolve uma função pronta da biblioteca Indy ou JCL, quando você precisa de uma solução nativa System.SysUtils.
A Técnica de Prompt
Defina as Restrições de Dependência explicitamente.
- Restrição Estrita: “Use apenas a RTL (Runtime Library) e VCL padrão. Não use bibliotecas de terceiros como JEDI ou Indy.”
- Restrição de Framework: “O código deve ser compatível com FireMonkey (FMX) para cross-platform, não use unidades
Vcl.*(comoVcl.Dialogs).” - Permissão Explícita: “Você pode utilizar a biblioteca RestRequest4Delphi para a requisição HTTP.”
Higiene de Código: Try/Finally e a Maldição do “With”
Object Pascal não possui Garbage Collection automático para classes (exceto interfaces e strings). O gerenciamento de memória é manual. Além disso, certas construções sintáticas antigas prejudicam a legibilidade e o debug.
A Maldição do With
O uso da cláusula with é amplamente desencorajado na comunidade moderna por tornar o código ambíguo e difícil de depurar. A IA adora usar with para “economizar tokens”.
- Comando: “Proibido usar a cláusula
with. Instancie objetos e acesse suas propriedades explicitamente.”
O Bloco de Proteção (Try/Finally)
A IA frequentemente esquece de liberar a memória ou coloca o Free fora de um bloco de proteção, o que causa Memory Leaks em caso de exceção.
- Comando: “Garanta que todo objeto instanciado seja protegido por um bloco
try...finallypara assegurar a chamada do método.Free(ouFreeAndNil), mesmo se ocorrerem erros.”
O Template de Prompt Ideal (“The Golden Prompt”)
Para obter o melhor resultado, combine os tópicos acima em um template estruturado. Copie e adapte o modelo abaixo:
Template:
Role: Atue como um Arquiteto de Software Delphi Sênior. Ambiente: Estou utilizando o Delphi 11 Alexandria. Tarefa: Crie uma função que [Descreva a funcionalidade, ex: leia um JSON e salve em um arquivo CSV]. Restrições Técnicas:
- Use apenas bibliotecas nativas (System.JSON, System.Classes). Nada de componentes de terceiros.
- NÃO utilize a cláusula
with.- Aplique tratamento de exceção robusto e use
try...finallypara evitar memory leaks.- Use recursos modernos como Inline Variables se aplicável.
- Comente o código explicando a lógica.
Referências
Versionamento e Sintaxe
- Object Pascal Handbook de Marco Cantù (Product Manager do Delphi).
- O livro explicita a introdução de Generics no Delphi 2009 e Inline Variables no Delphi 10.3 Rio. Pedir código sem especificar a versão pode gerar sintaxe inválida (ex: declarar variáveis no meio do bloco
begin..endem versões anteriores ao Rio).
Evitar With
- Embarcadero Quality Portal e Diretrizes de “Clean Code in Delphi”.
- O uso de
withremove a clareza do escopo. Se você temwith Button1 do Caption := 'X', e o formulário também tem uma propriedadeCaption, o compilador pode se confundir ou, pior, o depurador não consegue inspecionar o valor corretamente. É um consenso de Code Smell na comunidade sênior.
Gerenciamento de Memória (Try/Finally)
- Documentação Oficial (DocWiki) – tópico “Memory Management”.
- Diferente de Java ou C#, classes em Delphi (herdeiras de
TObject) residem no Heap e não são gerenciadas automaticamente (exceto em plataformas móveis com ARC antigo, que foi removido no Delphi 10.4 para unificar o modelo de memória). Portanto, o padrãoCreate -> Try -> Finally -> Freeé mandatório para evitar vazamentos de memória.
RTL/VCL vs. FireMonkey
- Hierarquia de Units da Embarcadero.
- Unidades como
Vcl.Dialogsdependem da API do Windows (Win32/Win64). Tentar usá-las em um projeto Android (que requerFMX.Dialogs) causará erro de compilação imediato. A distinção explícita no prompt é necessária pois a IA não sabe qual framework você escolheu ao criar o projeto (“VCL Application” vs “Multi-Device Application”).
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.
Muito bons seus artigos. Aprendo muito com eles. Obrigado e continue esclarecendo!