1968年の投書「goto文は有害」
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/25 06:17 UTC 版)
「構造化プログラミング」の記事における「1968年の投書「goto文は有害」」の解説
詳細は「goto文#goto文論争」を参照 1968年のACM機関紙への投書「Go To Statement Considered Harmful」は、そのセンセーショナルなタイトルで当時のプログラマの間に大きな論争を巻き起こした。その要約は次の通りである。 プログラマの仕事は正しいプログラムを作り上げた時に終結し、コンピュータにそのプログラム実行が委託されるとプログラマの手を離れて、コンピュータ内の動作形態であるプロセスに作り替えられることになる。 私たち人間の能力は、静的なプログラムの内容を把握するのには向いているが、コンピュータ内で逐一変化していく動的なプロセスの状態を把握することには向いていない。従って私たちは静的なプログラムと動的なプロセスの間にあるギャップを埋めなければならない。 そのためには、動的なプロセスの動態指標(dynamic index)と正確に対応できる静的なプログラムの文体指標(textual index)の表現が必要になる。goto先ラベルはその要求を満たしていない。「if B then A」「if B then A1 else A2」の選択節や「while B repeat A」「repeat A until B」の反復節の方が適している。 gotoとラベルを用いた選択文と反復文の記述では、状態判定とジャンプが個々に並べられるので、これはプログラムの混乱の原因になる。特にラベルの多用は取り除かれるべきであり、それに伴ってgotoの使用数も削減される。 ただし、前述の節(clause、選択節と反節復)使用の徹底であらゆる必要性をまかなえるという訳ではない。goto文の論理冗長性は証明されているが、goto文削減がそのままフロー明瞭化に繋がる保証はないので推奨まではしない。 この投書は、当時のソフトウェア開発現場で横行していたgoto先ラベルの安易な使用に警鐘を鳴らすためのものであったが、添えられた学術的注釈と文芸的比喩の数々が却って読み手の理解を妨げてしまい、冒頭のタイトル印象のみを先走りさせて、goto文論争を発生させることになった。この投書は比較的さり気ないもので、当時のダイクストラが方々の現場で目にしていたラベル多用をたしなめたい所感から書かれていた。ダイクストラが記していた元々の題名はA case against goto statement(goto文への訴え)であり、その時の編集者によって挑戦的なタイトルにすげ替えられていたのが事の真相である。 goto文論争はプログラミング分野の一つの流行として1970年代から80年代までの長きに渡って続いており、多くのプログラマにとっても馴染み深いテーマになっている。goto文と構造化定理の応酬はプログラミング談義の定番でもあった。ダイクストラは後年の著作で自分が提唱した構造化プログラミングの本質の一つは、この投書のテーマであった状態遷移の適切な表現方法と把握手段の確立としている。
※この「1968年の投書「goto文は有害」」の解説は、「構造化プログラミング」の解説の一部です。
「1968年の投書「goto文は有害」」を含む「構造化プログラミング」の記事については、「構造化プログラミング」の概要を参照ください。
- 1968年の投書「goto文は有害」のページへのリンク