O "caso contra a declaração" de Dijkstra se aplica tanto ao chamado moderno dos encapsulações nomeadas do código quanto as funções?

StackOverflow https://stackoverflow.com/questions/20353488

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top