TOP命令一覧制御系命令>GOSUB[]
 GO[]  GOSUB[]  RETURN[]  LOOP[]  LOOPBREAK[]  LOOPCONTINUE[]  LOOPEND[]  WAIT[]
 IF[]  ELSE[]  IFEND[]  IFBREAK[]  IFCONTINUE[]  TASK[]  TASKINFO[]  TASKEND[]  END[]

■サブルーチンジャンプ命令 GOSUB[ ]


指定したラベルの位置にジャンプし、RETURN 命令で戻ってきます。


キーワード
# = ラベル名ジャンプ先のラベルを指定
PINT〜PINT10 = 整数値ジャンプ先に渡す整数値を指定
PFLT〜PFLT10 = 実数値ジャンプ先に渡す実数値を指定
PSTR〜PSTR10 = 文字列ジャンプ先に渡す文字列を指定
例:  GOSUB[#="ABC"] 指定したラベルの位置にジャンプするまでは GO 命令と同じですが、ジャンプ先で RETURN 命令があると、GOSUB 命令の次の位置に戻ってきます。ジャンプした先に さらに GOSUB 命令があった場合、さらにジャンプしていきます(GOSUBネスト)。 GOSUBのネストは64回まで可能です。 また、ジャンプ先にパラメータ(値や文字列)を受け渡しすることが出来ます。 GOSUB[#="ABC" PINT=50 PINT2=100 PSTR3="APPLE"] 上のように書くと、パラメータを3つ、ジャンプ先に渡すことが出来ます。 (第1パラメータ=50、第2パラメータ=100、第3パラメータ="APPLE") ジャンプ先(上の例だとラべル #ABC )で、パラメータを受け取る方法として、 システム変数 @_PINT( ), @_PFLT( ), $_PSTR( ) をそれぞれ利用します。 上の命令が実行されて、実際にラベル #ABC へジャンプした時点で、システム変数 @_PINT(1) に 50 が、@_PINT(2) に 100 が、$_PSTR(3) に "APPLE" が格納される こととなります。 GOSUB[#="いろは" PFLT=12.3 PSTR2="ゲーム" PINT3=10] とすれば、 @_PFLT(1) に 12.3 が、$_PSTR(2) に "ゲーム" が、@_PINT(3) に 10 が格納されます。 パラメータ番号は重複しないようにしてください。 たとえば、 GOSUB[#="ABC" PFLT=12.3 PSTR="ゲーム" PINT3=10] は、コンパイルエラーとなります。 何がいけないかと言うと、第1パラメータが2つ指定されてしまっています。 「PFLT」と「PSTR」です。パラメータ番号が重複しないように、 どちらかを第2パラメータ指定(PFLT2かPSTR2)に変更しなくてはいけません。 同様に、RETURN 命令からパラメータを受け取ることも出来ます。 RETURN[RINT=10 RINT2=20] と記述されていれば、RETURN 命令が実行されて戻ってきた時点で、 今度はシステム変数 @_RINT(1) に 10 が、@_RINT(2) に 20 が格納されます。 ※@_PINT と @_RINT との違いに注意してください。 @_PINT は GOSUB でジャンプした時に格納される変数で、 @_RINT は RETURN でジャンプ元へ戻った時に格納される変数です。 パラメータは最大10個まで受け渡しすることが出来ます。