http://delphi.about.com/od/adptips2006/qt/goto_label.htm
Quando comecei a programar lembro que uma das primeiras coisas que aprendi foi:
GOTO não deve ser usado!
Simples assim. E eu simplesmente absorvi este mandamento, sem questionar. Isso me pareceu um tabu da programação, sei lá.
É óbvio que o uso indiscriminado do goto torna o código ilegível e concordo que ele deve ser evitado. Afinal goto é um salto de um ponto do programa a outro.
Mas tempo passou. E com o amadurecimento e quebra de tabus descobri uma situação onde o goto é últil. IFs aninhados. Não sei se por dislexia ou algo parecido eu simplesmente não entendo o código abaixo...
procedure QualquerCoisa; begin {...} if (CondiçãoA) then begin {...} end else if (CondiçãoB) then begin {...} end else if (CondiçãoC) then begin {...} end else if {...} {...} end; {...} end;
Bom, prefiro assim:
procedure QualquerCoisa; label Fim; begin if (CondiçãoA) then begin {...} goto Fim; end; if (CondiçãoB) then begin {...} goto Fim; end; if (CondiçãoC) then begin {...} goto Fim; end; {...} Fim: {...} end;
Mas temos que usar com moderação.
Adendo em 02/04/2014:
Vi no Facebook à pouco esta postagem e é muito aderente à forma como penso:
http://blog.smartbear.com/development/goto-still-has-a-place-in-modern-programming-no-really/