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 principios 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.