Por que usar um padrão de codificação? A organização do código fonte facilita os processos de desenvolvimento, retirada de bugs, atividades de validação e manutenção. O uso de um padrão de codificação também aumenta a produtividade num projeto, uma vez que a comunicação dentro da equipe de desenvolvimento fica mais fácil, mas vale ressaltar que partes desses padrões são vistas, algumas vezes, como sugestões por empresas que adotam seus próprios padrões.

  • Comentários: Usamos as chaves { } para iniciar e terminar um comentário com mais de uma linha, esse tipo de comentário é comum para se informar dados gerais e específicos de Unit e métodos, vindo no seu inicio. Dentro dos comentários com chaves não devemos usar asteriscos, símbolos ou caracteres especiais. Outro tipo de comentário usado é a barra de data digitada duplamente// neste caso o comentário se ressume a uma linha, devendo ser dado um espaço após a segunda barra para começar o texto desejado.
  • Indentação: Ato de separar os níveis de codificação por espaços em branco. No caso da Linguagem Delphi a indentação deve ter dois espaços, não se podendo usar tabulação.
Observação1
As palavras reservadas program, unit, interface, uses, type, var, implementation, initialization, finalization e end. não podem ser indentadas.
Observação2
Se desejar indentar várias linhas simultaneamente, selecione-as e em seguida pressione Ctrl+Shift+I que a IDE faz a indentação automaticamente. Caso precise remover uma indentação de um código selecionado pressione Ctrl+Shift+U.
  • Espaços em branco: Os espaços em branco, assim com a linhas, ajudam na legibilidade do código, mas existem as exceções:
    • Entre o método e o parâmetro de abertura:
      
      procedure CalcularSalario(ID_Funcionario: integer); // Correto
      procedure CalcularSalario (ID_Funcionario: integer); // Incorreto
  • Após um parêntese de abertura ou antes de um parêntese de fechamento:
    
    procedure CalcularSalario(ID_Funcionario: integer); // Correto
    procedure CalcularSalario( ID_Funcionario: integer); // Incorreto
    procedure CalcularSalario(ID_Funcionario: integer ); // Incorreto
    procedure CalcularSalario( ID_Funcionario: integer ); // Incorreto
  • Após um colchete de abertura ou antes de um colchete de fechamento:
    
    Valor := Matriz[1] // Correto
    Valor := Matriz[ 1] // Incorreto
    Valor := Matriz[1 ] // Incorreto
    Valor := Matriz[ 1 ] // Incorreto
  • Entre um operador unário(+ ou -) e o seu operando:
    
    Valor := -1 // Correto
    Valor := - 1 // Incorreto
  • Antes ou depois de um operador ponto( . ):
    
    Button1.Caption := ‘Correto’; // Correto
    Button1. Caption := ‘Incorreto’; // Incorreto
    Button1 .Caption := ‘Incorreto’; // Incorreto
    Button1 . Caption := ‘Incorreto’; // Incorreto
  • Antes de uma virgula:
    
    Variav1, Variav2: Integer; // Correto
    Variav1 , Variav2: Integer; // Incorreto
  • Antes de dois pontos:
    
    Variav1, Variav2: Integer; // Correto
    Variav1, Variav2 : Integer; // Incorreto
  • Antes de ponto e virgula:
    
    Variav1, Variav2: Integer; // Correto
    Variav1, Variav2: Integer ; // Incorreto
  • if, for, while, repeat, try, with : Devem estar em mais de uma linha e indentado entre os níveis. Quando houver begin o mesmo deve estar em uma nova linha e o seu end deve estar no mesmo nível.
    
    if Teste then
      Valor := 10;
     
     if not Teste then
     begin
      Valor1 := 10;
      Valor2 := 20;
     end;
     
     for I := 0 to ValorFinal do
     begin
      Valor[I] := ValorFinal * I;
     end;
     
     while Tabela.Eof do
     begin
      ShowMessage(Tabela.FieldByName(‘Nome’).AsString);
      Tabela.Next;
     end;
     
     repeat
      Inc(Valor);
     until Valor > 10;
     
     try
      try
      Tabela.Open;
      Form1.ShowModal;
      finally
      Tabela.Close;
      end;
     except
      ShowMessage(‘Localizado um erro’);
     end;
     
     with Tabela do
     begin
      Append;
      FieldByName(‘Nome’).AsString := ‘Tadeu Pereira’;
      Post;
     end;
  • case: As opções ficam num nível abaixo do case, sendo assim elas devem estar indentadas. Caso seja necessário usar o begin, o mesmo deve ser indentado em consideração a opção. O bloco de comandos deve estar indentado em consideração ao begin.
    
    case Controle of
      0..9: Valor := Controle * 3;
      10: Valor := Controle * 2;
      else Valor := Controle;
     end;
     
     case Objeto.Color of
      clBlack:
      begin
      ShowMessage(‘A cor é preta’);
      end;
      clWhite:
      begin
      ShowMessage(‘A cor é branca’);
      end;
     end;
  • Quebras de linha: A linha deve ter no máximo oitenta caracteres, se for ultrapassado esse limite a linha deve ser quebrada. As linhas seguintes devem ser indentadas e quebradas da mesma maneira.
  • Organização de Classes:
    • Quanto aos níveis: Primeiro devem ser feita as declarações em private seguidas pelas feitas em protected, public e published.
    • Quanto a ordenação: Primeiro os campos, seguido pelos métodos e por fim as propriedades.

Convenções de nomenclatura

As convenções adotas para fazer nomeação na Linguagem Delphi é uma seção a parte, uma vez que o padrão muda de acordo com o que se deseja atribuir o nome.

  • Arquivos: O nome do arquivo deve ser iniciado com letra maiúscula e o restante deve ter letras minúsculas, salvo os casos em que esse nome é composto por mais de uma palavra, nesse caso cada palavra deve iniciar com letra maiúscula acompanhada por letras minúsculas – chamamos esse uso de maiúsculas e minúsculas de camel caps ou infix caps. A extensão do arquivo deve conter apenas letras minúsculas.
    
    Cadastro.pas – UntPrincipal.dfm – MeuSistema.dpr
  • Classes: A classe deve ser iniciada pela letra T maiúscula acompanhada pelo nome seguindo o padrão infix caps.
    
    TNovaClasse – TPessoa – TDiario
  • Campos: Semelhante a classe, só que nesse caso devemos trocar a letra T pela letra F também maiúscula.
    
    FNome – FCidade – FLimiteCompra
  • Métodos: Os métodos devem ter nomes de verbos no imperativo e seguir o padrão de infix caps.
    
    CalcularSalario(); – GravarNome(); – VerificarLimite();
  • Parâmetros: Também semelhante a classe, e assim como os campos trocamos a letra T, só que nesse caso pela letra A maiúscula. Esse padrão é uma sugestão que a própria VCL não a segue completamente, sendo usada como opcional.
    
    NomeMétodo(AParam1, AParam2: Integer; AParam3: string);
  • Variáveis: Deve seguir o padrão Infix caps.
  • Constantes: Assim como as variáveis, as constantes seguem o padrão Infix caps.
  • Tipos enumerados: As iniciais fixas dos valores possíveis dos tipos enumerados devem começar com letras minúsculas, o restante deve seguir o padrão Infix caps.
    
    TAlignment = (taLeftJustify, taRightJustify, taCenter);