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 é 100. 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 100 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.
- Adicionar uma quebra de linha após o sinal de atribuição
- 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 100 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 100 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 100 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 100 colunas, processo pode ser interrompido.
- Após todas essas etapas a linha ainda ultrapassa a marca de 100 colunas?
- Caso ainda assim, a linha ultrapasse a marca de 100 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 100 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;
Entre o método, parâmetro e parêntesesMé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);
Matriz não possui espaçamento entre o nome, colchetes e valor
Correto
LTeste := LMatriz[0];
Incorreto
LTeste := LMatriz[ 0];
LTeste := LMatriz[0 ];
LTeste := LMatriz[ 0 ];
Uso de operadoresOperadores 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+1;
LTeste := 1 +1;
LTeste := 1+ 1;
Subrotinas devem possuir 4 caracteres de espaçamento
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;
Declarações de Units nas Uses:Uses
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;