■サブルーチンジャンプバック命令 RETURN[ ]
指定したラベルの位置にジャンプし、RETURN 命令で戻ってきます。
キーワード
# = ラベル名 | ジャンプ先のラベルを指定 |
RINT〜RINT10 = 整数値 | ジャンプ先に渡す整数値を指定 |
RFLT〜RFLT10 = 実数値 | ジャンプ先に渡す実数値を指定 |
RSTR〜RSTR10 = 文字列 | ジャンプ先に渡す文字列を指定 |
例: RETURN[RINT=50]
RETURN 命令でジャンプ元に戻る際に、パラメータを受け取ることも出来ます。
上の例では、RETURN 命令が実行されてジャンプ元に戻ってきた時点で、
システム変数 @_RINT(1) に 50 が格納されます。
※@_PINT と @_RINT との違いに注意してください。
@_PINT は GOSUB でジャンプした時に格納される変数で、
@_RINT は RETURN でジャンプ元へ戻った時に格納される変数です。
パラメータは最大10個まで受け渡しすることが出来ます。
※注意!!
YU-RIS(β4現在)の少し特殊な仕様なのですが、
RETURN 命令がスクリプト上の記述されていると、
そこを通る通らないに関わらず、その時点でローカル変数は解放され、
宣言されていない状態と同じになります。
たとえば、以下の場合、コンパイルエラーとなります。
#TEST
INT[@A=1]
IF[@A==5]
RETURN[] //←ここで、ローカル変数@Aは非宣言状態となる
IFEND[]
@A+=1 //←結果的にここでコンパイルエラーとなる
RETURN[]
これを回避する場合、下のように、RETURN 命令1個だけで済むように
記述してください。
#TEST
INT[@A=1]
IF[@A==5]
GO[#=TEST2]
IFEND[]
@A+=1
#TEST2
RETURN[]
上のようにラベルを作りたくない場合、こういう書き方もあります。
#TEST
IF[1]
INT[@A=1]
IF[@A==5]
IFBREAK[LV=2]
IFEND[]
@A+=1
IFEND[]
RETURN[]
1つのルーチンに対し、RETURN 1個で済むのならば
他のどんな書き方でも問題ないと思います。
|