誰もがダイクストラの編集者への手紙を知っています。有害と見なされるステートメントに移動し(ここでも .htmlトランスクリプトとここに .pdf)、その時点からgotoステートメントを可能な限り避けようとする手ごわいプッシュがありました。gotoを使用して、保守不可能な大規模なコードを生成することは可能ですが、それでも最新のプログラミング言語には残っています。Schemeの高度な継続制御構造でさえ、洗練されたgotoとして説明できます。
gotoを使用する必要があるのはどのような場合ですか?いつ避けるのが最善ですか?
追加質問として:Cは、現在のスタックフレーム内だけでなく、任意の呼び出しフレーム内に移動する機能を提供する、setjmpとlongjmpの2つの関数を提供します。これらはgotoと同じくらい危険だと考えるべきですか?もっと危険な?
ダイクストラ自身はその肩書きを後悔したが、彼には責任がなかった。EWD1308(ここでも .pdf)の終わりに彼は書きました:
最後に、記録のための短編小説。1968年、ACMの通信は「有害と見なされたgotoステートメント」というタイトルで私のテキストを公開しましたが、これは後年最も頻繁に参照されることになりますが、残念ながら、それよりも多くの場合、テンプレートになることで私の名声の土台となったタイトル:「Dijkstra有害と見なされる」というタイトルのタイトルを含むほとんどすべてのXについて、「X有害と見なされる」というタイトルの下にあらゆる種類の記事が表示されます。しかし、何が起こったのでしょうか?「後藤声明に反対する訴訟」というタイトルで論文を提出しました「それは、その出版をスピードアップするために、編集者は「編集者への手紙」に変わりました、そしてその過程で彼は彼自身の発明の新しいタイトルを与えました!編集者はニクラウス・ワースでした。
このトピックについてよく考え抜かれた古典的な論文は、ダイクストラの論文と一致するように、Donald E. Knuthによるgo to Statementsを使用した構造化プログラミングです。両方を読むことは、文脈の再確立と主題の非独断的な理解に役立ちます。この論文では、このケースに関するダイクストラの意見が報告されており、さらに強力です。
ドナルドE.クヌース:そのような見解を示すことで、ダイクストラの考えにはっきりと反対しているのではないと私は信じています。彼が最近次のように書いたからです。ステートメントに行く]。プログラミングの概念的な問題は、単純な形式のコーディング規律によって1つのトリックで解決できるかのように、他の人がそれを信仰しているという不快な気持ちを持っています! "
goto
。