Ir para o conteúdo

Indentação

Indentar é quase tão importante quanto saber programar. Não faz com que o programa corra melhor ou pior, mas faz parte das boas práticas de programação. Um programa bem indentado permite-nos entender melhor a sua estrutura e facilita a descoberta de erros bem como a fácil e correcta introdução de algumas actualizações, optimizações, e correcções de qualquer tipo. Caso alguém precise de ler o nosso código, irá perder muito menos tempo a entender a estrutura.

Para informações mais gerais: http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o

O objectivo aqui é mostrar os princípios da indentação, e a minha preferência pessoal. Eu utilizo uma indentação de 2 espaços (sem tabulações).

Program Indentar;

Begin
  Writeln('Ola mundo!');
end.

Nas declarações presentes no cabeçalho do programa, bibliotecas, procedimentos e funções, caso tenham até cerca de quatro elementos faço-o na mesma linha.

Uses CRT, Graph;

Caso utilize várias bibliotecas de "categorias" diferentes, separo-as por diferentes linhas, mas sempre com a mesma indentação.

Uses 
  CRT, Graph, System,                          {Bibliotecas do Pascal}
  Global, Intro, Quadros, GraphTPU, MouseLib;  {Bibliotecas Pessoais}

Exemplo de um corpo principal de um programa:

Program Indentar;

Uses 
  CRT, Graph, System,                          {Bibliotecas do Pascal}
  Global, Intro, Quadros, GraphTPU, MouseLib;  {Bibliotecas Pessoais}

Const
  Dia:array [0.. 6] of String[9]=('Domingo','Segunda','Terça','Quarta','Quinta','Sexta', 'Sabado');
  Mes:array [1..12] of String[10]=('Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro');  

Type
  RCodigo=Record
    Codigo:String;
  End;
  FRCodigo=file of RCodigo;

  RMaterial=Record
    Desc:String;
    Fab,RefFab:String;
    Data_Aqui:Array[1..3]of word;
    Periodo:byte;
    Res,Gama:String;
    Local:String;
  End;
  FRMaterial=file of RMaterial;  

Var
  Cod:RCodigo;    FCod :FRCodigo;   {Normalmente uso ficheiros de registos, assim coloco}
  Mat:RMaterial;  FMat :FRMaterial; {na mesma linha a variavel registo e respectivo ficheiro} 
  FTxt,FPrn:Text;
  Posicao:Longint;
  CodigoAux,DescAux:String;
  Data_AquiAux:Array[1..3]of word;
  i,j,k:integer;
  DataAno,DataMes,DataDia,DiaSem:word;
  Horas,Min,Seg,Dec:Word;

Begin
  Writeln('Ola mundo!');
end.

Como se pode ver, toda a estrutura do programa está perfeitamente perceptível.

No caso das estruturas de decisão e de repetição, exceptuando-se o Repeat..Until, quando têm apenas um comando coloco o comando na mesma linha da estrutura senão coloco o begin na linha da estrutura e depois todos os comandos que desejo afectar pela estrutura indentados. O end coloco alinhado com a linha onde é chamada a estrutura. Pegando no "olá mundo", vamos a um exemplo prático:

Program Indentar;

Uses CRT;

Var i:integer;

Begin
  i:=0;
  While i<6 do begin
    textbackground(i);
    if i=3 then textcolor(i+8+127)
    else textcolor(i+8);
    Writeln('Ola mundo!',i);
    i:=i+1;
  end;
  textbackground(black);
  textcolor(lightgray);
  Writeln('Pressione a tecla "enter" para sair');
  readln;
end.

Como se pode verificar, consegue-se ver perfeitamente qual o código que está afecto ao While. Note-se que a coluna inicial do end referente ao while é a mesma que a do inicio da estutura while. Como o If e o else apenas tinham um comando cada um, estes ficaram nas mesmas linhas do If e do else.

Uma das estruturas que sai fora desta minha norma é a estrutura case. Nesta, alinho os dois pontos de separação dos casos e dos comandos, se tiverem mais do que um comando e o end fica alinhado com o respectivo begin. Mais uma vez vou pegar no nosso exemplo

Program Indentar;

Uses CRT;

Var i,x:integer;

Begin
  i:=0;
  While i<7 do begin
    textbackground(i);
    Case i of
      0..2:textcolor(i+8);
      3   :begin
             x:=i+8+127;      
             textcolor(x);
           end;
      3..6:textcolor(i+8);
      else begin
        textcolor(black);
        x:=i;
      end
    end;  
    Writeln('Ola mundo!',i);
    i:=i+1;
  end;
  textbackground(black);
  textcolor(lightgray);
  Writeln('Pressione a tecla "enter" para sair');
  readln;
end.

A indentação não se aplica apenas ao Pascal, mas sim a todas as linguagens de programação em geral. Bem ou mal é com este tipo de indentação que me entendo após alguns ajustes pessoais, mas sei que há quem use indentações diferentes. Espero com este tópico possa ajudar quem se está a aventurar no mundo da programação.