goto文
出典: フリー百科事典『ウィキペディア(Wikipedia)』
goto文(ゴートゥ)はプログラミング言語において、無条件に指定されたラベルや行番号にジャンプ(跳ぶ)する文である。gotoとは、英語のgo toに由来する名称で、「○○へ行け」と言う意味を持つ。間に空白(スペース)を入れて "go to" を使用する・使用できる言語もある。
目次 |
[編集] goto文の使用への批判
Cなどの構造化プログラミング言語においては、goto文はむやみに使ってはいけないと言う暗黙の約束がある。これは、goto文が原始的で自由度の高すぎる機能であるため、安易なgoto文の使用はプログラムの構造化を妨げ、デバッグなどが行いにくくなり、バグの発生や、メンテナンス性・可読性の低下の原因になりやすいからである。
しかし、多重にネストしたfor文やif文,while文などでエラー処理や例外処理などが複雑になる場合はgoto文を使った方がプログラムがすっきりとかけるケースも有るため、プログラムの構造を熟知したプログラマが状況に応じて使い分けるものとされている。
オブジェクト指向言語の場合は、エラー処理や例外処理などの仕組みが充実しているためにgoto文が必要になるケースが少ない。そのため、言語仕様として始めから用意されていないケースもある。こうした言語としては、Javaなどが挙げられる。
BASICの様な言語や低レベルの制御言語ではgoto文は不可欠であり、goto文を利用しないと分岐やループを使ったプログラムが記述出来ないものもある。しかし、拡張されたBASICの中には、goto文がほとんど不必要になってしまっているものもある。
前述のように、goto文の安易な使用はプログラムの可読性を著しく低下させる。こうした可読性の低いコードのことを、制御構造が複雑に絡まっているという意味を込めて、スパゲティコードと呼ぶことがある。
[編集] 文法
[編集] C言語の場合
C言語の場合では、指定したラベルにジャンプする。
goto ラベルの例文として以下に記す。
clear: x = 0; …… goto clear;
goto文が実行されると、clearラベルにジャンプし、文x = 0;
を実行する。つまり、プログラムはclearラベルに処理を移し、処理を続けるということである。
[編集] 関連項目
[編集] 外部リンク
- Go To Statement Considered Harmful について
- Go To Statement Considered Harmful Edsger W. Dijkstra
- Go To Statement Considered Harmful: A Retrospective David R. Tribble
- Code Reads #2: Dijkstra's "Go To Statement Considered Harmful" Scott Rosenberg
- Radium Software Development - Go To Statement Considered Harmful
- What led to "Notes on Structured Programming" (EWD1308) Edsger W. Dijkstra