goto文 【go to文】 goto statement
「goto」のキーワードに続けて、次に実行するコードの位置をラベルや行番号などで指定する。プログラムが実行されgoto文に差し掛かると、指定した箇所へ実行位置がジャンプし、その箇所にある文から実行が継続される。
CPUの命令語にはメモリ上の任意の位置に次の実行箇所を変更するジャンプ命令(無条件分岐)があり、同じ機能をプログラミング言語で再現したものと考えることができる。制御の流れを変更する構文の中で最も単純で、古くから多くのプログラミング言語の仕様に取り込まれてきた。比較的新しい言語の中にはgoto文が用意されていないものもある。
効用と批判
if文(条件分岐)などと組み合わせれば、条件付きのループや特定のブロックのスキップ、遠く離れたプログラム末尾付近から冒頭付近への移動など、様々な複雑な制御を記述することができる。
しかし、goto文自体には「指定した位置へ飛ぶ」という内容しか書かれておらず、どのような意図でそのような移動を行うのか、現在位置と飛び先はどのような関係にあるのかといった事情は周囲のコード(場合によってはプログラム全体)を注意深く観察しなければ分からない。
むやみに多用するとプログラムの見通しが悪くなり、制御の流れの把握が困難な「スパゲッティコード」状態になりやすい。高水準プログラミング言語にはif文やfor文、while文、switch文、break文、continue文など様々な構文が用意されており、極力これらを使うべきとされる。
ただし、深くネストした多重ループから一気に脱出したい場合や、エラーや例外などを処理するコードなどでは、特定の位置に移動する方がシンプルなコードになることがあり、どのような場合でもgoto文を避けるべきなわけではないとする考え方もある。
(2023.2.5更新)