Padrões de Codificação
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.
Exemplos: |
- 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.
Exemplos: |
- 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.
Exemplo: 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.
Exemplo: TNovaClasse – TPessoa – TDiario
- Campos: Semelhante a classe, só que nesse caso devemos trocar a letra T pela letra F tambúm maiúscula.
Exemplo: FNome – FCidade – FLimiteCompra
- Métodos: Os métodos devem ter nomes de verbos no imperativo e seguir o padrão de infix caps.
Exemplo: 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.
Exemplo: 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.
Exemplo: TAlignment = (taLeftJustify, taRightJustify, taCenter);