sexta-feira, 16 de outubro de 2009

Eu uso GOTO sim, você me perdoa?

Estava lendo uma matéria muito interessante sobre o uso do goto.

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/

Minha lista de blogs