こんにちは!BASICの学習、順調に進んでいますか?😊 前回は条件分岐や繰り返し処理を学びましたね。今回は、プログラムの流れを制御するもう一つの方法、GOTO
、GOSUB
、RETURN
について学びましょう。
GOTO文:指定した場所へジャンプ ➡️
GOTO
文は、プログラムの実行を指定した「ラベル」または「行番号」に強制的に移動させます。
構文:
GOTO ラベル名
' または
GOTO 行番号
ラベルは、通常、行の先頭に記述され、コロン(:)で終わります(例: MyLabel:
)。行番号は、古いBASICで使われていたもので、各行の先頭に番号を振っていました。
例:
10 PRINT "無限ループに入ります..."
20 GOTO 10 ' 行番号10へジャンプする
' ラベルを使った例 (QBasicなど)
PRINT "Start"
GOTO SkipSection
' この部分は実行されない
PRINT "ここはスキップされます。"
SkipSection:
PRINT "ここにジャンプしました!"
END
最初の例では、行番号20が実行されると、無条件に行番号10に戻るため、無限ループになります。(実行を止めるには Ctrl+C など、環境に応じた中断操作が必要です)。
ラベルを使った例では、GOTO SkipSection
が実行されると、SkipSection:
というラベルが付いた行までジャンプし、間の PRINT
文は実行されません。
GOTO
の使いすぎには注意しましょう。 通常のループ処理には FOR...NEXT
や WHILE...WEND
を、条件分岐には IF...THEN...ELSE
を使うのが基本です。
GOSUB / RETURN文:サブルーチンへのジャンプと戻り 🔄
GOSUB
文は、プログラムの一部を「サブルーチン」として定義し、それを呼び出すために使います。サブルーチンは、特定の処理をまとめたもので、プログラムのいろいろな場所から呼び出すことができます。サブルーチンの処理が終わったら、RETURN
文を使って、GOSUB
で呼び出した場所の次の行に戻ります。
構文:
' サブルーチンの呼び出し
GOSUB ラベル名
' または
GOSUB 行番号
' ... 他の処理 ...
' サブルーチンの定義
ラベル名:
' サブルーチンの処理
RETURN ' 呼び出し元に戻る
' または
行番号 ' サブルーチンの処理
RETURN ' 呼び出し元に戻る
例:
PRINT "メインプログラム開始"
GOSUB PrintMessage ' サブルーチンを呼び出す
PRINT "メインプログラムに戻りました"
GOSUB PrintMessage ' もう一度呼び出す
PRINT "処理終了"
END ' プログラムをここで終了させないと、サブルーチンに流れ込んでしまう
PrintMessage: ' サブルーチンの開始ラベル
PRINT "--- これはサブルーチンからのメッセージです ---"
RETURN ' 呼び出し元に戻る
この例では、メインプログラムから GOSUB PrintMessage
で PrintMessage:
ラベルのついたサブルーチンを2回呼び出しています。サブルーチン内の PRINT
文が実行された後、RETURN
文によって GOSUB
の次の行(PRINT "メインプログラムに戻りました"
や PRINT "処理終了"
)に処理が戻ります。
サブルーチンの終わりには、END
文などを置いて、メインプログラムの実行がそのままサブルーチンに流れ込まないように注意が必要です。
GOSUB
は、処理を部品化する簡単な方法ですが、引数を渡したり、戻り値を受け取ったりする機能はありません。より高度なサブルーチン(SUB
や FUNCTION
)は、後のステップで学びます。これらは GOSUB
よりも構造的で、より複雑なプログラムを作るのに適しています。
まとめ ✨
命令 | 機能 | 戻り | 注意点 |
---|---|---|---|
GOTO ラベル/行番号 |
指定したラベル/行番号へ一方的にジャンプする | 戻らない (ジャンプ先に制御が移る) | コードが読みにくくなるため、多用は避ける ⚠️ |
GOSUB ラベル/行番号 |
指定したラベル/行番号のサブルーチンを呼び出す | RETURN 文で呼び出し元の次に戻る 🔄 |
簡単な処理の部品化に使えるが、引数/戻り値はない。構造化には SUB /FUNCTION が望ましい。 |
RETURN |
GOSUB で呼び出されたサブルーチンから、呼び出し元の次の命令に戻る |
(GOSUB とセットで使う) | GOSUB を使わない場所で実行するとエラーになることがある。 |
GOTO
や GOSUB
は、BASIC の基本的な制御構文ですが、使い方には注意が必要です。特に GOTO
は、現代的なプログラミングスタイルではあまり使われません。これらの命令の特性を理解し、より読みやすく、メンテナンスしやすいコードを書くためには、IF
, FOR
, WHILE
などの構造化構文を積極的に活用しましょう!
次のステップでは、画面への出力やキーボードからの入力について学びます。お楽しみに!🎉
コメント