Dijkstra の編集者への手紙: go to ステートメントが有害であると見なされていることは誰もが認識しており(こちらの.html トランスクリプトとこちらの .pdf も)、その時以来、可能な限り goto ステートメントを避けるようにという手ごわいプッシュがありました。goto を使用して保守不可能な無秩序なコードを生成することは可能ですが、それでも最新のプログラミング言語に残っています。Schemeの高度な継続制御構造でさえ、洗練された goto として記述できます。
goto の使用が正当化されるのはどのような状況ですか? 避けるのがベストな時期は?
フォローアップの質問として: C は setjmp() と longjmp() の 1 組の関数を提供します。これらは、現在のスタック フレーム内だけでなく、任意の呼び出しフレーム内で goto する機能を提供します。これらは goto と同じくらい危険であると考えるべきですか? もっと危ない?
ダイクストラ自身は、彼が責任を負わなかったそのタイトルを後悔しました。EWD1308 (これも.pdf )の最後に、彼は次のように書いています。
最後に記録のための短い物語。1968 年、Communications of the ACM は、「 goto ステートメントは有害であると見なされた」というタイトルで私のテキストを公開しました。このタイトルは、テンプレートになることで私の名声の基礎となりました。「ダイクストラは有害と見なされます」というタイトルの記事を含め、ほぼすべての X について、「X は有害と見なされます」というタイトルの下にあらゆる種類の記事が表示されます。しかし、何が起こったのですか?私は「 goto文に対する訴訟」というタイトルで論文を提出していました」の発行を早めるために、編集者は「編集者への手紙」に変更し、その過程で彼は自分の発明の新しいタイトルを付けました! 編集者はニクラウス・ヴィルトでした.
このトピックに関するよく考えられた古典的な論文は、Dijkstra の論文と一致するように、Donald E. Knuth による構造化プログラミング with go to Statementsです。両方を読むことは、主題の文脈と非独断的な理解を再確立するのに役立ちます. この論文では、このケースに関するダイクストラの意見が報告されており、さらに強力です。
ドナルド E. クヌース:私は、そのような見解を提示することによって、実際にダイクストラの考えに激しく反対しているわけではないと信じています。彼は最近次のように書いているからです:まるでプログラミングの概念的な問題が 1 つのトリック、単純な形式のコーディング規律によって解決できるかのように、他の人がそれから宗教を作っているという不快な感じがあります!」