スパゲティプログラム
「*」をコントローラーで左右に動かすプログラムを一般的な記法で書いたもの。 条件分岐させ水平座標、Xが 0未満、28を超えないように加減算する。
以下はよく用いられていた圧縮方法で書かれたソース。
メイン部分を1行にまとめるために、条件分岐を省いている。 水平座標の変数 Xのはみ出しをチェックする関係式の評価を数値として扱い、1個の算術代入文としている。 しかしMSX BASICでは式の評価が 真ならば-1、偽ならば0 が返る為、一見すると変数 Xへの加算と減算が逆に見えてしまう。
構造化BASICの子孫は、Visual Basic for Applications (VBA) やVisual Basic .NET (VB.NET) といった形で生き残っており、2023年現在も実用途で使われ続けている。
構造化プログラミングを可能とする構文機能を備えたPascalやC言語では、一応goto文もサポートされていたものの、BASICのような無条件のジャンプ命令ではなく、サブルーチン(プロシージャ/関数)を飛び越える大域ジャンプには使えないものだった。
さらにC++やJavaといった後発言語では、例外処理や多重ループを抜けるためのラベル付きbreak文(制限されたgoto文)を用意し、基本的には悪しきgoto文は使用しないようになった。C#にもgoto文は用意されているが、多重ループの脱出にgoto文を用いることは推奨されておらず、メソッドとして抽出してreturn文を用いることが推奨されている。
なお次のような場合、goto文を使うことが容認される場合や使わざるを得ない場合もあった。
C言語等でエラー発生時の後始末(ヒープメモリ解放やファイルクローズなど)を記述する場合、goto文を使うことでエラー処理をまとめて書きやすくなることがある。
リソースが極度に制限された組み込み環境など、高水準言語が使えず、アセンブリ言語のような低水準言語を直接使わざるを得ないケース