・GOTOなどで行番号を直接指定することはできない
・分岐先やデータ位置はすべてラベルで指定
・@で始まる英数字とアンダースコア(_)
@MAINLOOP
・ジャンプ先のラベル名
ラベル名 の形式でプログラムSLOT指定も可能
・ラベル名をでくくったラベル文字列(文字列変数も可)
・1:
・あらかじめUSE命令で対象SLOTを使用可能にしておくこと
GOTO @MAIN JP$="@MAIN":GOTO JP$
・呼び出すサブルーチンのラベル名
ラベル名 の形式でプログラムSLOT指定も可能
・ラベル名をでくくったラベル文字列(文字列変数も可)
・1:
・あらかじめUSE命令で対象SLOTを使用可能にしておくこと
GOSUB "@SUB"
RETURN
DEF CALC(A,B) RETURN A*B END PRINT CALC(2,3)
・複数の値を返すDEF命令の宣言で利用
・複数の値を返す組み込み命令でも利用される
DEF SUB A OUT D,M D=A DIV 10 M=A MOD 10 END SUB 34 OUT DV,ML PRINT DV,ML
ラベル0,
ラベル1…分岐するための値が入った変数(0~)
制御変数が0のときのジャンプ先
制御変数が1のときのジャンプ先
:
・必要な数だけ飛び先を用意する
・ON~GOTOのラベルには、ラベル文字列は使えない
ON IDX GOTO @JMP_A,@JMP_B PRINT OVER:END @JMP_A PRINT "IDX=0":END @JMP_B PRINT "IDX=1":END
ラベル0,
ラベル1…分岐するための値が入った変数(0~)
制御変数が0のときのジャンプ先
制御変数が1のときのジャンプ先
:
・必要な数だけ飛び先を用意する
・ON~GOTOのラベルには、ラベル文字列は使えない
ON IDX GOTO @JMP_A,@JMP_B PRINT OVER:END @JMP_A PRINT "IDX=0":END @JMP_B PRINT "IDX=1":END
ラベル0,
ラベル1…分岐するための値が入った変数(0~)
制御変数が0のときのサブルーチン
制御変数が1のときのサブルーチン
:
・必要な数だけ飛び先を用意する
・ON~GOSUBのラベルには、ラベル文字列は使えない
ON IDX GOSUB @SUB_A,@SUB_B PRINT EXIT:END @SUB_A PRINT "IDX=0":RETURN @SUB_B PRINT "IDX=1":RETURN
ラベル0,
ラベル1…分岐するための値が入った変数(0~)
制御変数が0のときのサブルーチン
制御変数が1のときのサブルーチン
:
・必要な数だけ飛び先を用意する
・ON~GOSUBのラベルには、ラベル文字列は使えない
ON IDX GOSUB @SUB_A,@SUB_B PRINT EXIT:END @SUB_A PRINT "IDX=0":RETURN @SUB_B PRINT "IDX=1":RETURN
・THENやELSE直後のGOTOは、GOTOを省略可能
・処理が複数行にわたるときはENDIFを使用
== | 等しい |
!= | 等しくない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
条件1 AND 条件2 | 同時に満たす |
条件1 && 条件2 | 同時に満たす |
条件1 OR 条件2 | いずれかを満たす |
条件1 || 条件2 | いずれかを満たす |
IF A==1 THEN PRINT OK IF A>1 THEN @JMP1 ELSE PRINT DATE$ IF A==1 THEN PRINT "オメデトウ":BEEP 2 ELSE PRINT "ザンネン" ENDIF @JMP1 END
IF A==1 THEN PRINT OK IF A>1 THEN @JMP1 'GOTOの省略 IF A==1 THEN PRINT "オメデトウ":BEEP 2 ELSE PRINT "ザンネン" ENDIF @JMP1 END
IF A==1 THEN PRINT OK IF A>1 THEN @JMP1 ELSE PRINT DATE$ IF A==1 THEN PRINT "オメデトウ":BEEP 2 ELSE PRINT "ザンネン" ENDIF @JMP1 END
・不成立時に続けて条件判断を行う場合に利用
・条件判定については、IFの説明をご覧ください
IF A==1 THEN PRINT "オメデトウ":BEEP 0 ELSEIF A==2 THEN PRINT "ザンネン" ELSE IF A==3 THEN PRINT "まあまあ" ENDIF ' ELSE IF の場合は必要 ENDIF
IF A==0 THEN PRINT "A=0" ENDIF
・ラベルにはラベル文字列も使用可能
・ELSE直後でのGOTO省略時に文字列は使えない
× IF A==0 GOTO @LABEL1 ELSE @LABEL2
○ IF A==0 GOTO @LABEL1 ELSE @LABEL2
○ IF A==0 GOTO @LABEL1 ELSE GOTO @LABEL2
IF A==1 GOTO @MAIN IF X<0 GOTO @JMP1 ELSE PRINT A$ IF Y==5 GOTO @JMP1 ELSE @JMP2 @JMP1 PRINT "@JMP1" @JMP2 PRINT "@JMP2" END
・処理の最後にはNEXT命令を置く
・条件が満たされない場合、1回も実行されないことがある
ループ回数をカウントする変数(1ループごとに増分が加算)
ループ開始時のループ変数の値または式
ループ終了時のループ変数の値または式
・ループ終わりにループ変数に加算する増分(省略時=1)
・増分が小数の時、演算誤差で意図した回数にならない可能性あり
FOR I=0 TO 9 STEP 2 PRINT I;","; NEXT
・FOR~NEXTについてはFOR命令の説明をご覧ください
FOR I=0 TO 9 STEP 2 PRINT I;","; NEXT
・FOR~NEXTについてはFOR命令の説明をご覧ください
FOR I=0 TO 9 STEP 2 PRINT I;","; NEXT
・FOR~NEXTについてはFOR命令の説明をご覧ください
・FORループ内のIFでNEXTを使うのは非推奨
・強制的に次のループへ進める時はCONTINUEを使用
・ループの強制終了はBREAKを使用
・制御変数は記述しても無視され単なるNEXTと同じ働き
・NEXT J,I のような記述は不可
FOR I=0 TO 9 STEP 2 PRINT I;","; NEXT
・不成立時、またはBREAK命令でループを抜ける
IFと同等の条件式を書くことができます
== | 等しい |
!= | 等しくない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
条件1 AND 条件2 | 同時に満たす |
条件1 && 条件2 | 同時に満たす |
条件1 OR 条件2 | いずれかを満たす |
条件1 || 条件2 | いずれかを満たす |
A=0:B=4 WHILE A<B A=A+1 WEND
A=0:B=4 WHILE A<B A=A+1 WEND
・ループの終わりにUNTIL命令と条件式を置く
・WHILE命令とは異なり先に処理を実行してから条件判断
・成立時、またはBREAK命令でループを抜ける
A=0:B=4 REPEAT A=A+1 UNTIL A>B
・ループの始まりにREPEAT命令を置く
・WHILE命令とは異なり先に処理を実行してから条件判断
・成立時、またはBREAK命令でループを抜ける
IFと同等の条件式を書くことができます
== | 等しい |
!= | 等しくない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
条件1 AND 条件2 | 同時に満たす |
条件1 && 条件2 | 同時に満たす |
条件1 OR 条件2 | いずれかを満たす |
条件1 || 条件2 | いずれかを満たす |
A=0:B=4 REPEAT A=A+1 UNTIL A<B
・FOR~NEXT、WHILE~WEND、REPEAT~UNTIL内で使用
FOR I=0 TO 9 IF I==1 THEN CONTINUE IF I==7 THEN BREAK PRINT I;","; NEXT
・FOR~NEXT、WHILE~WEND、REPEAT~UNTIL内で使用
FOR I=0 TO 9 IF I==1 THEN CONTINUE IF I==7 THEN BREAK PRINT I;","; NEXT
END
DEF FUNC PRINT FUNC END
・中断したプログラムSLOT:行番号が表示される
・CONT命令で続行可能(ただし状況によっては続行できない)
STOP