Espaçamento Regras para Formatação Horizontal  Tabulação : Utilizar 2 caracteres (espaços) ao invés da tabulação. Para manter a estrutura do código de modo que sua leitura seja fácil, o número máximo de caracteres por linha é 130 . Caso a expressão ultrapasse esse comprimento, a linha deve ser quebrada segundo essas regras: A linha tem comparações? ('a = b', 'a <> b', 'a <= b', 'a >= b', 'a < b' ou 'a > b')  Envolver cada comparação com parênteses.  A linha contem negação? ('not') Envolver cada negação com um parênteses. A linha contém operadores lógicos? ('and' e 'or') Envolver cada sequência de 'and' com um parênteses; Envolver cada sequência de 'or' com um parênteses. A linha é uma atribuição? (':=') Adicionar uma quebra de linha após o sinal de atribuição (':=') , alinhar a nova linha com a linha original e indentar em um nível (2 espaços); Caso o código resultante não tenha ultrapassado a linha das 130 colunas, processo pode ser interrompido; Caso a atribuição seja uma String, ela pode ser quebrada em uma ou mais concatenações. Essas podem ser quebradas e alinhadas com a linha original, adicionando um nível de indentação; Caso a atribuição seja uma comparação (Não considerar comparações dentro de métodos aninhados), adicionar uma quebra de linha após o sinal de comparação ('=', '<>', '<=', '>=', '<' ou '>') , e alinhar a nova linha com o primeiro operando. A linha tem um 'if'? Caso a condição do if não tenha um parênteses envolvendo a condição inteira, envolvê-la com um; Adicionar uma quebra de linha após cada operador 'and' ou 'or' ; Após cada quebra de linha, alinhar a nova linha com o parênteses onde ela está contida e adicionar um espaço; Caso o código resultante não tenha ultrapassado a linha das 1 colunas, processo pode ser interrompido; Caso alguma das condições do if tenha uma comparação (Não considerar comparações dentro de métodos aninhados), adicionar uma quebra de linha após o sinal de comparação ('=', '<>', '<=', '>=', '<' ou '>') , e alinhar a nova linha com o primeiro operando. Caso o código resultante não tenha ultrapassado a linha das 130 colunas, processo pode ser interrompido. A linha contém métodos aninhados? Aplicar essa regra do métodos mais externo para o mais interno; Adicionar uma quebra de linha exatamente antes do início do método aninhado; Alinhar a nova linha com o método onde ela está contida (Caso o método tenha uma negação (not), alinhar com o início dessa negação), adicionar ainda um nível de indentação (2 espaços); Caso o código resultante não tenha ultrapassado a linha das 130 colunas, processo pode ser interrompido. A linha contém parâmetros? Ao realizar a quebra de linha de um parâmetro, ele deve estar indentado um nível (2 espaços) em relação ao nível do método proprietário do parâmetro (caso o método proprietário tenha uma negação (not), alinhar com o início dessa negação); Caso o código resultante não tenha ultrapassado a linha das 130 colunas, processo pode ser interrompido. Após todas essas etapas a linha ainda ultrapassa a marca de 130 colunas? Caso ainda assim, a linha ultrapasse a marca de 130 colunas então deve-se verificar a existência de pontos na expressão (“.”), sendo que, ao realizar esse tipo de quebra de linha, o ponto deve ficar com a expressão na linha inferior, indentado em um nível em relação ao início da expressão. Observação: Algumas vezes, quando uma linha ultrapassa as 130 colunas, é um sinal de que esse trecho pode ser refatorado. O programador pode então refatorar, se julgar que é necessário ou melhor. Declaração de variáveis  Correto var LTeste: Integer; Incorreto var LTeste : Integer; LTeste :Integer; Atribuições Correto LTeste := 15; Incorreto LTeste:=15; LTeste:= 15; LTeste :=15; Métodos Correto procedure Ex(AParametro: Integer); procedure Ex(AParametro1, AParametro2: Integer); procedure Ex(AParametro: Integer; AParametro2: String); Incorreto procedure Ex (AParametro1: Integer); procedure Ex( AParametro: Integer); procedure Ex(AParametro: Integer ); procedure Ex(AParametro1,AParametro2: Integer); procedure Ex(AParametro1 , AParametro2: Integer); procedure Ex(AParametro: Integer;AParametro2: String); procedure Ex(AParametro: Integer ; AParametro2: String); Matrizes Correto LTeste := LMatriz[0]; Incorreto LTeste := LMatriz[ 0]; LTeste := LMatriz[0 ]; LTeste := LMatriz[ 0 ]; Operadores binários Correto LTeste := 1 + 1; Incorreto LTeste := 1+1; LTeste := 1 +1; LTeste := 1+ 1; Operadores unários Correto LTeste := -1; Incorreto LTeste := - 1; LTeste :=-1; Subrotinas Correto function MeuMetodo: String; procedure SubMetodo; begin //Código SubMetodo end; begin //Código MeuMetodo end; Incorreto function MeuMetodo: String; procedure SubMetodo; begin //Código SubMetodo end; begin //Código MeuMetodo end; function MeuMetodo: String; procedure SubMetodo; begin //Código SubMetodo end; begin //Código MeuMetodo end; Uses Dica: Para identificar se uma unit deve ser declarada na uses superior ou inferior, realize o seguinte teste: Copie a unit para a uses inferior e compile o programa, caso o processo de compilação não apresente erros, a unit deve permanecer na uses inferior. Caso contrário, mova a unit para a uses superior. No primeiro “uses“ (logo abaixo de “interface”) declarar as units no .dfm e nas assinaturas dos métodos. interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs; No segundo “uses“ (logo abaixo de “implementation”) declarar as units usadas na implementação do código. implementation uses uExisteTabela, uProcuraRegistro, uGravaSistema; A fim de evitar conflito em Merge devido a alterações em mesma linha, cada Unit deve ser declarada em linha diferente. Esse erro costuma acontecer principalmente quando há refatoração ou exclusão de algum componente visual. Correto implementation uses uExisteTabela, uProcuraRegistro, uGravaSistema; Incorreto implementation uses uExisteTabela, uProcuraRegistro, uGravaSistema; Arrays Ao indentar elementos de um array, eles devem seguir a lógica de ordenação de parênteses. Por não estarem em níveis diferentes de indentação, devem ser indentados da seguinte forma Correto TClasse.Metodo( Parametro1, Parametro2, [Item1, Item2, Item3 Item4, Item5, Item6]); Incorreto TClasse.Metodo( Parametro1, Parametro2, [Item1, Item2, Item3 Item4, Item5, Item6]); TClasse.Metodo( Parametro1, Parametro2, [Item1, Item2, Item3 Item4, Item5, Item6]); IN em tratamento de condições Correto Result := (Self in [cdfIncidenciadecisaojudicial, cdfIncidenciaDecisaoJudicial13Sal, cdfIncidenciaDecisaoJudicialAvisoPrevioIndenizado]); Incorreto Result := Self in [cdfIncidenciadecisaojudicial, cdfIncidenciaDecisaoJudicial13Sal, cdfIncidenciaDecisaoJudicialAvisoPrevioIndenizado]; Result := (Self in [cdfIncidenciadecisaojudicial, cdfIncidenciaDecisaoJudicial13Sal, cdfIncidenciaDecisaoJudicialAvisoPrevioIndenizado]);