プログラミング言語におけるgoto文(ゴートゥぶん、英: goto statement)とは、手続き列中の指定された場所(専らラベルで指定される)に無条件にジャンプ(移動)する、という制御構造のひとつを表現するための「文」である。古い文献などで "go to" と離していることもあるのは、英語の go to どこそこ、といったような言い回しとの類似のためでもあり、FORTRANではプログラム中の空白は基本的に無視されるので、goto でも go to でも同じだったからという理由もある(BASIC処理系の中にも、どちらも使えるようにしているものもある[要説明])。
「構造化プログラミング」を提唱していたコンピュータ科学者らの一人であったダイクストラは、1968年に“Go To Statement Considered Harmful”(Go To 文は有害とみなされる)という刺激的なタイトルの記事を国際学会ACMの学会誌Communications of the ACMに投稿し[注釈 4]、論争を巻き起こした。こんにちでは構造化プログラミングに関してその名前だけが最もよく知られている論争となっている。その内実は言葉の有名さの割には全く知られていないし、内容や意味の理解は時代の変遷によって、かなり難しくなっていることも確かである。クヌースの言葉を借りるならば、「go to 文除去の話の二番目の場面は,多くの人たちが第一幕だと思っている事実である。」[3]。
また considered harmful というフレーズはその後、しばしば似たような深刻な、あるいは軽妙な論争に関して付けられるものとなっている。
ダイクストラの主張
“Go To Statement Considered Harmful”[4]の趣旨は次の通りである。
その一方でクヌースの指摘[5]によると、ダイクストラは“Structured Programming”[6]においてはgoto文には触れていない。実際に“Structured Programming”においては“sequencing should be controlled by alternative, condtional and repetitive clauses and procedure calls, rather than by statements transferring control to labelled points.”との1文があるのみでそれ以外では触れていない。
また、「3つの基本構造」(後述)についても、“Go To Statement Considered Harmful”においては“I do not claim that the clauses mentioned (引用者註: 順次・分岐・手続き呼び出し・反復) are exhaustive in the sense that they will satisfy all needs”とし、「3つの基本構造」には固執していない。
「構造化プログラミングの観点からgoto文を使うのは望ましくない」ものの「単にgoto文を使わなければ見通しが良くなる」という考えは“Go To Statement Considered Harmful”[4]でも否定されており、goto文の有無のみに固執するのは不毛である。構造化プログラミングの本質の一つは、大きなプログラムを小さな構造、すなわちサブルーチンや関数に分割し、プログラムの正しさを証明することである。
また、ドナルド・クヌースは「go to 文を用いた構造的プログラミング」(『文芸的プログラミング』収録)の中で、いくつかのgotoを使ったほうが良いだろうという例を挙げているが、その中には、再帰呼出しのある正当なプログラムを、正当な変形によってループによるプログラムに書き換えた結果「ループの中に飛び込むgoto」になる、といったような例も挙げている。
なお、論文“Go To Statement Considered Harmful”は、その半ば挑戦的な題名がプログラミング以外の様々な分野に及んで評判となり、それをもじった様々な “〜 Considered Harmful” といった論説やジョークが生まれた(en:Considered harmful)。極めつきは、何かが有害であることだけが強調される題名の有害性を指摘した“‘Considered Harmful’ Essays Considered Harmful”であろう。同じくWhat led to "Notes on Structured Programming" においてダイクストラは、Millsによって矮小化されたgoto文廃止という概念のもと、IBMが用語としての「構造化プログラミング」を盗用したと語っている。
^Knuth, D. E. (1974). “Structured Programming with go to Statements Computing Surveys”. ACM, New York, NY, USA6 (4): 261-301. CiteSeerx: 10.1.1.103.6084.