Goto (programação)O comando goto (do inglês go to, em português ir para) é uma estrutura de controle para salto de instruções. Sua sintaxe é, em geral: goto destino , onde destino pode ser um label (rótulo ou nome de um endereço) ou um número, que representa um determinado endereço. As instruções passam a ser executadas no endereço apontado por destino. Em assembly de x86, o controle de fluxo é baseado em saltos (instruções como JMP, JZ, JNZ), que são comparáveis ao Situações de usoCríticas de Dijkstra à legibilidade de programas escritos com uso extensivo de Donald Knuth analisou e avaliou quão apropriado é (ou não) o uso de Uma retrospectiva sobre o assunto é apresentada por David Tribble, com diversos exemplos de código (C, C++, Assembly, Java) com e sem uso de Exemplos(não confundir com Visual Basic ou outros Basic) Uso de 10 PRINT "Quanto é 7 - 7?"
20 INPUT A
30 IF A = 0 THEN GOTO 60
40 PRINT "Errado... Tente outra vez!"
50 GOTO 20
60 PRINT "Certo! Parabéns!"
70 END
Uma aplicação citada por Brian Kernighan & Dennis Ritchie[11] é para escapar de laços muito aninhados: for (i=0; i<P; i++) {
for (j=0; j<Q; j++) {
for (k=0; k<R; k++) {
...
if ( condicao )
goto CONTINUACAO;
...
}
}
}
CONTINUACAO:
...
Em linguagens sem suporte a tratamento de exceções (como é o caso de C), int realizaProcedimentos(void)
{
int estado;
estado = fazPrimeiraEtapa();
if (estado==ERRO)
goto RESTAURA1;
estado = fazSegundaEtapa();
if (estado==ERRO)
goto RESTAURA2;
estado = fazTerceiraEtapa();
if (estado==ERRO)
goto RESTAURA3;
return (SUCESSO);
RESTAURA3:
desfazTerceiraEtapa();
RESTAURA2:
desfazSegundaEtapa();
RESTAURA1:
desfazPrimeiraEtapa();
return (ERRO);
}
Referências
|