GOTO - programação estruturada ou não?
GOTO é um comando encontrado em diversas linguagens de programação.
Quando executado, ele provoca uma transfência incondicional do PC (Program Counter, ou Contador de Programa) para outra parte do código. Este comando é utilizado especificando-se algum tipo de label, que pode ser um identificador ou número da linha, dependendo da linguagem. No nível de linguagem de máquina, o goto é um considerado um tipo de salto (mnemônico jmp).
O comando GOTO é encontrado na maioria das linguagens de alto nível, como Ada, FORTRAN, Algol, COBOL, BASIC, Common List, C, C++, C#, D, Pascal, Perl, Visual Basic, Batch (MS-DOS), entre outras.
Em algumas linguagens, a funcionalidade do goto está presente sem a presença explícita de seu identificador, como, por exemplo, as instruções break ou continue.
Existem algumas linguagens de alto nível que não suportam o comando goto. Por exemplo, Java, onde goto é uma palavra reservada, mas não realiza nenhuma função. Hypertalk, TranScript (também conhecida como Revolution), AppleScript e Rubytambém não possuem goto.
Crítica ao uso de GOTO
O comando GOTO é alvo de muitas críticas, que alegam que seu uso produz códigos difíceis de serem lidos e mantidos, criando o que é chamado "spaghetti code". Como a programação estruturada se tornou popular nas décadas de 60 e 70, muitos cientistas da computação chegaram a conclusão que os programas sempre devem usaram comandos de controle de fluxo "estruturados", tais como laços e if-then-else ao invés de GOTO. No entando, outros acreditam que seu uso não torna o código complicado e pobre, e que algumas tarefas não poderiam ser realizadas o uso de um ou mais GOTO's como, por exemplo, sair de laços aninhados e tratamento de exceções.
Provavelmente a crítica mais famosa ao GOTO foi uma carta de Edsger Dijkstra de 1968, chamada Go To Statement Considered Harmful.
Nessa carta, Dijkstra argumenta que o uso livre de GOTO deve ser abolido das linguagens de alto nível porque dificultam a tarefa de analisar e verificar a correção de programas (principalmente aqueles envolvendo laços). Um ponto de vista alternativo é apresentado por Donald Knuth, Structured Programming with go to Statements, que analisa muitas tarefas de programação comuns e concluir que o uso de GOTO é o melhor método a ser usado.