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 (Deixarei os dois modelos para decidirmos mais tarde)
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ênteses
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 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+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;