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.