14
Normas de Codificação Padrões Delphi Normas de Codificação Padrões Delphi 1

Normas de Codificação - Padrão Delphi

Embed Size (px)

Citation preview

Normas de Codificao

Padres Delphi

Normas de Codificao Padres Delphi

1

1. IDE E SINTAXE 1.1. Identao1.1.1.A Identao de dois espaos por nvel. No guarde caracteres tab nos seus arquivos fonte.

1.2. Margens 1.2.1. As margens devem ser ajustadas para 120 caracteres, sem excees;1.2.2.Comandos que se estendem alm da margem direita devem ser quebrados em quantas linhas forem necessrias; 1.2.3.As linhas que se originarem da quebra de um comando devem sofrer identao de dois espaos em relao primeira linha; Exemplos:

1.2.4.Entre uma clusula e outra, deve ser deixada uma linha apenas. Exemplos:

Normas de Codificao Padres Delphi

2

1.3. Par begin..end 1.3.1. Todo novo bloco de cdigo, iniciado por um comando if, while, for... deve estar contido em um parbegin..end, mesmo que este contenha apenas uma linha; 1.3.2. O comando begin deve aparecer em sua prpria linha sem identao; 1.3.2.1. A nica exceo a esta regra acontece quando o begin estiver precedido pela clusula else. Exemplos:

Normas de Codificao Padres Delphi

3

1.4. Parnteses 1.4.1. No deve haver espaos em branco entre um abre parnteses e o prximo caractere; 1.4.2. No deve haver espaos em branco entre um fecha parnteses e o caractere anterior.Exemplos:

1.5. Palavras reservadas e palavras chave 1.5.1. As palavras grifadas como highlight (string, function, var...) devero ser escritas com todas as letrasminsculas.

1.5.1.1. A exceo a esta regra est no mtodo Register. 1.5.2. Demais palavras reservadas, como tipos nativos do Delphi (Integer, Char, Double), devero respeitar suasdeclaraes originais. Exemplos:

2. COMANDOS 2.1. Comando if 2.1.1. Se a expresso booleana a ser testada for composta por duas ou mais condies, estas devem estardispostas da esquerda para a direita, em ordem inversa sua complexidade computacional. Esta regra far nosso cdigo ganhar em performance, uma vez que o compilador est configurado (por default) para finalizar o teste quando uma das condies for suficiente para determinar o resultado de toda a expresso. Exemplos:

2.1.2. Sempre que o encadeamento sucessivo de ifs puder ser representado por um comando case, este ltimodever ser utilizado.

Normas de Codificao Padres Delphi

4

2.2. Comando case 2.2.1. Os casos individuais dentro de um comando case devem estar sempre em ordem crescente; 2.2.2. A implementao de cada caso deve estar envolvida pelo par begin..end; 2.2.2.1. Este o nico caso em que o par begin..end deve aparecer identado; 2.2.3. Quando necessria, a clusula else deve estar alinhada com o comando case.Exemplo:

2.3. Comando for 2.3.1. Comandos for devem ser utilizados quando o nmero de iteraes do loop conhecido;Exemplos:

2.3.2. Quebras extraordinrias de laos pelo comando Break so consideradas m tcnica de programao eesto proibidas. Neste caso, o comando for deve ser substitudo por um comando while. Exemplos:

2.3.3. O comando Continue est proibido. 2.4. Comando while 2.4.1. As condies de quebra do lao devem ser ordenadas seguindo a regra de ordenao do comando if; 2.4.2. Todas as condies de quebra do lao devem estar contidas na clusula while. 2.4.3. O uso do comando Break ou do comando Continue est proibido.Exemplos:

Normas de Codificao Padres Delphi

5

2.5. Comando repeat 2.5.1. As condies de quebra devem ser ordenadas seguindo a regra de ordenao do comando if. 2.5.2. Laos do tipo repeat devem ser utilizados sempre que o lao exige no mnimo uma iterao, mas comnmero final de iteraes varivel;

2.5.3. Todas as condies de quebra do lao devem estar contidas na clusula until; 2.5.4. O uso do comando Break ou do comando Continue est proibido.Exemplos:

2.6. Comando Exit 2.6.1. O uso do comando Exit considerado uma m prtica de programao e est proibido. 2.7. Comando with 2.7.1. O uso do comando with considerado uma m prtica de programao e est proibido.

3. ERROS E EXCEES 3.1. Mensagens de erro 3.1.1. Mensagens de erros seguidas do comando Abort no devem ser utilizadas. Excees devem ser utilizadaspara esta funo, assim aumentamos a capacidade de reutilizao do cdigo. Exemplos:

Normas de Codificao Padres Delphi

6

3.2. Tratamento de Excees 3.2.1. O tratamento de excees deve ser fortemente utilizado, tanto para correo de erros quanto paraproteo de recursos. Devemos sempre garantir que recursos alocados localmente sejam liberados quando possvel atravs do comando try..finally; 3.2.2. No utilizar um comando try..finally para desalocar mais de um recurso, pois esta prtica no totalmente segura; Exemplos:

3.2.3. No utilize o comando try..except para exibir uma mensagem de erro, esta j ser exibida pelo tratador deerros que estiver ativo. Utilize este recurso quando realmente uma ao se faz necessria como conseqncia da exceo; Exemplos:

Normas de Codificao Padres Delphi

7

4. NOTAO HNGARA 4.1. Definio4.1.1.A notao hngara um mtodo utilizado para facilitar a identificao de palavras que devem aparecer juntas ou ligadas. Cada palavra utilizada para formar o contexto deve ser escrita com a primeira letra em maiscula e as demais em minscula; 4.1.1.1. Siglas devem ter suas letras mantidas em maisculas quando utilizadas. 4.1.2.No permitido o uso de underlines (_);

5. CONSTANTES E VARIVEIS 5.1. Constantes5.1.1.Constantes globais esto proibidas. Crie suas constantes dentro da classe ou mtodo apropriado. Exemplos:

5.2. Variveis 5.2.1. Variveis globais esto proibidas. Quando necessrio, crie fields do tipo class var na classe apropriada.Exemplos:

Normas de Codificao Padres Delphi

8

6. TIPOS SIMPLES 6.1. Nomenclatura para derivaes6.1.1.Tipos derivados (no nativos da linguagem Delphi) devem sempre ser prefixados com a letra T maiscula. 6.1.1.1. A exceo a esta regra est na criao de ponteiros. Estes devem ser batizados com a letra P maiscula, mais o nome do tipo para o qual o ponteiro far referncia, sem o T quando este for derivado. 6.1.2. Aps ser prefixado, o nome do tipo deve seguir a notao hngara; Exemplos:

6.2. Tipos de ponto flutuante 6.2.1. No utilize o tipo Real, o mesmo foi substitudo pelo tipo Double e apenas existe para manter acompatibilidade com verses anteriores;

6.2.2. Utilize o tipo Extended somente quando for estritamente necessrio. O barramento padro (na arquitetura32bits) otimizado para trabalhar com mltiplos de 4 Bytes, logo este tipo prejudica a performance por utilizar 10 Bytes ao armazenar o seu valor.

6.3. Tipos enumerados 6.3.1. Os itens de um tipo enumerado devem ser prefixados com duas letras em minsculo que ajudem aidentificar a qual tipo o enumerado pertence;

6.3.2. Depois de prefixado, o nome do item deve seguir a notao hngara;6.3.3.A enumerao dos itens deve acontecer de forma que o delimitador posterior (,) fique junto do item corrente, seguido de um espao separando este do prximo. Exemplos:

Normas de Codificao Padres Delphi

9

7. CLASSES 7.1. Nomenclatura 7.1.1. Nomes de classes devem sempre ser prefixados com a letra T maiscula; 7.1.1.1. A exceo a esta regra a criao de classes derivadas de Exception (diretamente ou no). Estasdevem ser prefixadas com a letra E maiscula.

7.1.2. Depois de prefixados, as novas classes devem ser batizadas seguindo a notao hngara.Exemplos:

7.2. Escopos de visibilidade7.2.1.Os escopos de visibilidade devem sempre ser declarados na ordem do mais restritivo para o menos restritivo; Exemplos:

Normas de Codificao Padres Delphi

10

7.3. Constantes 7.3.1. Constantes devem ser batizadas com nomes que expressem facilmente o seu propsito e devem sergrafadas em CAIXA ALTA. Quando o nome de uma constante for composto por mais de uma palavra, estas devem estar separadas por underlines (_); Exemplos:

7.4. Atributos ou fields 7.4.1. Os fields de uma classe devem obrigatoriamente pertencer ao escopo private ou strict private, sendo esteltimo o preferencial;

7.4.2. Fields devem ser prefixados com a letra F maiscula. 7.4.3. Depois de prefixados, os fields devem ser batizados seguindo a notao hngara.Exemplos:

Normas de Codificao Padres Delphi

11

7.5. Mtodos7.5.1.Mtodos devem possuir nomes significativos ao seu propsito; 7.5.2.O verbo que representa a ao do mtodo deve estar sempre no infinitivo; 7.5.3.Mtodos devem ser batizados seguindo a notao hngara; 7.5.4. Ao declarar uma function, o tipo de retorno deve ser declarado de forma que o caractere : no seja precedido de espao(s), e sim, sucedido por um espao antes do tipo; Exemplos:

7.5.5. Rotinas utilizadas para leitura e escrita de propriedades (Getters e Setters) devero ser prefixadas comGet e Set, respectivamente; Exemplos:

7.5.6.Parmetros devem ser prefixados com a letra p minscula; 7.5.7. Parmetros no devem apresentar prefixos de tipagem (s para string, i para Integer...); 7.5.8.Depois de prefixados, os parmetros devem ser batizados seguindo a notao hngara; 7.5.9. Os parmetros devem ser dispostos em ordem inversa a sua especificidade, ou seja, quanto mais genrico, mais a esquerda; 7.5.10. A enumerao de parmetros deve sempre acontecer de forma que o delimitador posterior fique junto do parmetro, seguido de um espao separando o mesmo do prximo parmetro ou de seu tipo; 7.5.11. Sempre que o parmetro no sofrer alteraes dentro do mtodo, o mesmo deve ser do tipo const; Exemplos:

7.5.12. Sempre que a regra de uma function no for prejudicada, seu resultado deve ser escrito diretamente dentroda varivel Result, evitando o uso de variveis auxiliares; Exemplos:

Normas de Codificao Padres Delphi

12

7.5.13. Variveis devem ser prefixadas com a letra l (L) minscula; 7.5.14. Variveis no devem apresentar prefixos de tipagem (s para string, i para Integer...); 7.5.15. Depois de prefixadas, as variveis devem ser batizadas seguindo a notao hngara; 7.5.16. Variveis devem ser inicializadas antes de lidas; 7.5.17. A enumerao de variveis deve seguir a mesma regra para enumerao de parmetros;

7.5.18. A enumerao de mais de uma varivel em uma mesma linha est permitida, desde que todas sejam do mesmo tipo; Exemplos:

7.5.19. Propriedades devem ser batizadas seguindo a notao hngara; 7.5.20. Propriedades podem existir a partir do escopo strict protected; 7.5.21. O uso das propriedades dentro da prpria classe onde foram declaradas est proibido; Desta forma o cdigo ser escrito com total clareza quanto ao uso ou no das regras de manuteno (field ou setter) da propriedade; Exemplos:

8. COMPONENTES 8.1. Padronizao por tipo de componente 8.1.1. Todo componente, quando utilizado pela primeira vez em tempo de design, deve gerar um conjunto de trsletras, minsculas, que identifique da melhor maneira possvel o nome da classe. Este identificador deve ser nico e no reutilizado por outras classes. O gerenciamento destes identificadores ser realizado por umNormas de Codificao Padres Delphi

13

pacote prprio da Sabemi, e a biblioteca de identificadores ser compartilhada entre todos os desenvolvedores.

8.2. Nomenclatura 8.2.1. Todo componente inserido no formulrio em tempo de design deve ser renomeado. Nenhum componentedeve ficar com o nome dado pela IDE; 8.2.2.O nome do componente ser prefixado com o identificador gerado para sua classe; 8.2.3.Depois de prefixado, o componente deve ser batizado seguindo a notao hngara, com um nome que represente facilmente a finalidade do mesmo.

9. ARQUIVOS 9.1. Units de cdigo 9.1.1. Units de cdigo devem ser prefixadas com a letra u minscula; 9.1.2. Depois de prefixada, a unit deve ser batizada seguindo a notao hngara, com um nome que expresse aprincipal funcionalidade da mesma. No caso de uma unit cuja principal funcionalidade seja a implementao de uma classe, recomenda-se que esta unit receba o nome da classe sem seu prefixo T; Exemplos:

9.2. Units de interface ou formulrios 9.2.1. Units de interface, utilizadas para gerenciar um formulrio, devem ser prefixadas com a letra f minscula; 9.2.2. Depois de prefixada, a unit deve ser batizada seguindo a notao hngara, com o nome do formulrio semseu prefixo (identificador da classe);

9.3. Units de Data Module 9.3.1. Units utilizadas para gerenciar um Data Module, devem ser prefixadas com a letra d minscula; 9.3.2. Depois de prefixada, a unit deve ser batizada seguindo a notao hngara, com o nome do Data Modulesem seu prefixo (identificador da classe);

Normas de Codificao Padres Delphi

14