No seu exemplo, você está chamando uma sub -rotina, em vez de transferir incondicionalmente e permanentemente o fluxo de controle (que é o que goto
faz).
Se você colocar código depois foo();
, esse código seria executado depois foo()
é chamado.
Pergunta
Não sei como funcionou naquela época, então não faço ideia do que ele estava se referindo.
Mas, pegue JS:
var x = 5;
var foo = function(y) { console.log(2); };
var y = 6;
foo(); // is this not in essence a goto statement?
Caso contrário, o que havia diferente nas declarações de goto?
Dijkstra teria se oposto a JS nesses motivos?
Solução
No seu exemplo, você está chamando uma sub -rotina, em vez de transferir incondicionalmente e permanentemente o fluxo de controle (que é o que goto
faz).
Se você colocar código depois foo();
, esse código seria executado depois foo()
é chamado.
Outras dicas
Não, isso é essencialmente uma declaração "Gosub". Você leu o artigo original? O IMHO Dijkstra ficou ofendido pelo estado de "manchas" em todo o seu código.
Esta é uma declaração de salto, não uma declaração Goto. Portanto, ele não cria código de espaguete.