User Tools

Site Tools


identacao_ou_alinhamento_de_codigo_por_colunas

Identação é uma palavra que vem do inglês identation e significa, neste contexto, o alinhamento de comandos em colunas de acordo com o nível hierárquico de aninhamento destes comandos. Identação é uma prática em programação estruturada e é viável em compiladores que ignoram espaços ou linhas em branco.

Em geral, é boa prática de programação identar blocos de comandos de maneira que, visualmente, o programa fique mais claro e mostre quais linhas de código são executadas por um determinado comando em um certo trecho do programa.

O objetivo é permitir que programas fiquem melhor apresentados e mais fáceis de se entender. É importante mentalizar que para o computador não faz diferença nenhuma, mas para o ser humano que lê o código é absolutamente fundamental.

É ináceitável escrever códigos com identação ruim!

Sempre que um bloco de comandos estiver no escopo de um comando (significa estar sob o controle do comando), a identação passa a ser interessante. A técnica elementar é deslocar este bloco mais a direita do que o comando principal. Isto facilita muito a visualização de diferentes escopos no programa.

Os dois exemplos abaixo ilustram esta situação, o primeiro está bem identado, o segundo não.

Exemplo:

program exemplo_identacao_boa;
 var
    i: integer;

 begin
    for i:= 1 to 10 do
       write (i);
    writeln ('Fim.');
 end.

Observe como o comando for foi deslocado 3 espaços para a direita com relação ao alinhamento begin-end do programa, bem como o comando write foi deslocado outros 3 espaços com relação a coluna do comando for (e portanto 6 com relação a ao begin-end). Já o comando que imprime a mensagem de fim ficou alinhado na mesma coluna do comando for, mostrando que está fora do seu escopo, isto é, consiste em um comando independente do for.

Exemplo:

program exemplo_identacao_ruim;
 var
    i: integer;
 begin
    for i:= 1 to 10 do
       write (i);
       writeln ('Fim.');
 end.

O motivo da identação confusa do segundo exemplo é que, visualmente, quem lê o código tem a falsa impressão de que o comando que imprime o texto ``Fim.'' está no escopo do comando \texttt{for} e portanto será repetido 10 vezes, o que não é verdade!

Se esta fosse de fato a intenção do programador, então ele deveria ter escrito da maneira como é mostrado no exemplo abaixo:

Exemplo:

program corrigindo_identacao_ruim;
 var
    i: integer;

begin
    for i:= 1 to 10 do
       begin
          write (i);
          writeln ('fim');
       end;
end.

Isto é, introduzindo o begin e o end que o programador provavelmente tinha esquecido.

O próximo exemplo é na verdade um contra-exemplo. Nunca se deve programar desta maneira, embora, como já dito, para o computador não faça diferença.

program exemplo_identacao_inaceitavel;
var
i: integer;
begin
for i:= 1 to 10 do
write (i);
writeln ('Fim.');
end.

O número de espaços do deslocamento depende da preferência do programador. Costuma-se utilizar entre 3 e 5 espaços em branco. Há programadores que utilizam a tabulação (tab), porém esta pode ser desconfigurada conforme o editor. Por outro lado, é possível configurar o tamanho da tabulação em diversos editores de texto, tais como vi ou emacs, por exemplo.

O importante é manter o mesmo número de espaços em todo o código. Deve-se também ter cuidado para não se avançar mais do que a última coluna da direita, pois o resultado também é confuso, conforme exemplo seguinte.

Exemplo:

program outro_exemplo_identacao_ruim;
 var
           i : integer;
 begin
           for i:= 1 to 10 do
                     for j:= 1 to 10 do
                               for k:= 1 to 10 do
                                         for l:= 1 to 10 do
                                                   write (i, j, k, l);
 end.

Quando se aninham muitos if-then-else também pode-se obter o mesmo efeito. O próximo código mostra isso.

program mais_um_exemplo_identacao_ruim;
var
     i : integer;
begin
     read (i);
     if i < 1 then
          write (i,' menor que 1')
     else
          if i <= 10 then
               write (i,'entre 1 e 10')
          else
               if i <= 20 then
                    write (i,' entre 11 e 20')
               else 
                    if i <= 30 then
                         write (i,' entre 21 e 30')
                    else
                         if i <= 40 then
                              write (i,' entre 31 e 40')
                         else
                              if i <= 50 then
                                  write (i,' entre 41 e 50') 

end.

Neste caso pode-se fazer como no exemplo abaixo.

program mais_um_exemplo_identacao_ruim;
var
     i : integer;
begin
     read (i);
     if i < 1 then
          write (i,' menor que 1')
     else if i <= 10 then
               write (i,'entre 1 e 10')
     else if i <= 20 then
              write (i,' entre 11 e 20')
     else if i <= 30 then
          write (i,' entre 21 e 30')
     else if i <= 40 then
          write (i,' entre 31 e 40')
     else if i <= 50 then
          write (i,' entre 41 e 50') 
end.

O melhor mesmo seria usar o comando case-of neste caso.

identacao_ou_alinhamento_de_codigo_por_colunas.txt · Last modified: 2019/04/24 11:13 by castilho