Goto文
“Go To Statement Considered Harmful”の趣旨は次の通りである。
人間が時間によって変化するプロセスを把握する能力は、プログラムの静的な関係を把握する能力に比べて劣っているため、静的なプログラムテキストの構造と時間によって変化するプロセスの構造をなるべく近づけるのが重要である。
そのためにはプロセスの進捗を表す簡潔な指標が必要である。指標とは例えば実行中の行番号・その時点でのスタックトレース・行番号とループを回った回数のペアなどである。
例えば、1人が部屋に入るごとにカウンタを増やしていくプログラムにおいて、カウンタが室内の人数-1である瞬間はどこにあるのかという問いに答える際に、簡潔な指標があればすぐ答えられるが、簡潔な指標がなければ正確な答えは難しくなる。
goto文を無条件に許してしまうと簡潔な指標は得られなくなってしまうため、上位水準のプログラミング言語においてはgoto文は廃止するべきである。
その一方でクヌースの指摘によると、ダイクストラは“Structured Programming”においてはgoto文には触れていない。
そのようにして表現されたものが人間にわかりやすいか否かについては触れられていないにもかかわらず、「この理論に従えばgotoを除去できる」(これは正しい)、「ゆえにわかりやすいプログラムになる」(これは正しくない)というのが、「goto文有害説」であるとして信じられるようになったため、そういったような記述がしばしば見られる。
構造化定理に従って「gotoの無いプログラム」に書き換えたプログラムが実際のところどのようなものであるのかは、英語版記事の en:Structured program theorem#Single-while-loop, folk version of the theorem に示されている。クヌースは「go to 文を用いた構造的プログラミング」の中で、これと同様のプログラムを示し「これですべての goto 文を除去できたわけであるが,実際にはすべての構造を失ってしまっている.」と述べ、構造化定理が示すことは、全くの「非構造化プログラミング」であることを警告した。