Dijkstraの「GOTO声明に対するケース」は、関数と同じようにコードの名前付きカプセルの現代の呼び出しにも同じくらい適用されますか?

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

質問

私はそれがその日にどのように機能したかわからないので、彼が何を言及していたのか分かりません。

しかし、JSを取ります:

var x = 5;
var foo = function(y) { console.log(2); };
var y = 6;
foo(); // is this not in essence a goto statement?

そうでない場合、GOTOの声明について何が違うのでしょうか?

Dijkstraはこれらの理由でJSに反対したでしょうか?

役に立ちましたか?

解決

あなたの例では、あなたは制御の流れを無条件かつ永続的に転送するのではなく、サブルーチンを呼び出しています(これは何ですか goto します)。

後にコードを入れた場合 foo();, 、そのコードは後に実行されます foo() 呼ばれています。

他のヒント

いいえ、これは本質的に「ゴスブ」ステートメントです。元の論文を読みましたか? Imho Dijkstraは、コード全体で「スミアリング」状態に腹を立てていました。

これはジャンプステートメントであり、GOTOステートメントではありません。したがって、Spaghettiコードは作成されません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top