ユーザー定義関数や拡張機器の制御などの命令

↑目次に戻る

DEF ユーザー定義命令について

DEFを使うと下記のような命令を独自に定義可能

1) USER ※引数なし、戻り値なし
2) USER X,Y ※引数あり、戻り値なし
3) A=USER(X) ※引数あり、戻り値1つ
4) USER(X) OUT A,B ※引数あり、戻り値複数

DEF共通の補足

・DEF~ENDまでが定義範囲となる
・DEF~END範囲で定義された変数やラベルはローカル扱い
・DEF~END範囲を越えるGOTOはできない
・DEF~END範囲内でGOSUBやON GOSUBは使用できない
・GOSUB 0:@SUBのようにSLOT指定があれば利用可能
・COMMON 命令を付けることでSLOTを超えて利用可能

DEF引数の仕様

・DEFで受け取る引数に関して厳密な型チェックは行わない
・必要な数だけカンマ(,)で区切り受け取る変数名を記述可能
・文字列変数には変数名の終わりに$を付けることも可能

DEF戻り値の仕様

・DEFの戻り値に関しての厳密な型チェックは行わない
・出力用変数に最初に書いた値で型が確定
・数値変数に整数値を代入すると整数型として扱う
・実数型として扱う場合は、A=100.0のように記述
・DEFからの戻り値を受け取った側の型と異なる場合エラー

DEF 定義名

返り値と引数の無いユーザー命令の定義

引数

なし

戻り

なし

' 文字表示
DEF FUNC
PRINT "SAMPLE" 
END
' 呼び出し
FUNC

DEF 定義名 引数 [,引数…]

引数があり返り値が無いユーザー命令の定義

引数

関数に渡したい引数があれば必要な分の変数名を記述

戻り

なし

' 指定位置に文字表示
DEF FUNC2 X,Y
LOCATE X,Y
PRINT "SAMPLE" 
END
' 呼び出し
FUNC2 10,4

DEF 関数名( [引数 [,引数…]] )

戻り値が1つだけあるユーザー関数の定義

引数

関数に渡したい引数があれば必要な分の変数名を記述

戻り

結果として返したい値を、RETURN命令の後に書く(RETURN ANS のような記述)

'足し算
DEF ADD(X,Y)
RETURN X+Y
END
' 再帰を使った階乗計算
DEF FACTORIAL(N)
IF N==1 THEN RETURN N
RETURN N*FACTORIAL(N-1)
END
' 文字列反転
DEF REVERSE$(T$)
VAR A$="" 'ローカル文字列
VAR L=LEN(T$) 'ローカル
WHILE L>0
 A$=A$+MID$(T$,L-1,1)
 DEC L
WEND
RETURN A$
END
' 呼び出し
PRINT ADD(10,5)
PRINT FACTORIAL(4)
PRINT REVERSE$(BASIC)

DEF 命令名 [引数 [,引数…]] OUT V1 [,V2…]]

複数の返り値を持つユーザー命令の定義

引数

関数に渡したい引数があれば必要な分の変数名を記述

戻り

結果として返したい数分の変数名をOUTの後に記述

' 足し算と掛け算
DEF CALCPM A,B OUT OP,OM
OP=A+B
OM=A*B
END
' 呼び出し
CALCPM 5,10 OUT P,M
PRINT P,M

COMMONについて

SLOTを超えて独自命令を使う場合に利用

・異なるSLOT間でプログラムを使う場合はUSEで先に実行しておくこと

1) COMMON DEF USER
2) COMMON DEF USER(X)
3) COMMON DEF USER(X) OUT A,B

COMMON DEF FOO(X, Y, Z)

CALL 命令名 [,引数…] [OUT 変数1 [,変数2…]]

指定名称を持つユーザー定義命令を呼び出す

引数

命令名

・呼び出すユーザー定義命令名の文字列
・文字列なので""でくくるか文字列変数を使用

引数~

指定した命令に必要な引数

戻り

結果として返したい数分の変数名をOUTの後に記述

CALL "USERCD",X,Y OUT A,B
'
DEF USERCD X,Y OUT A,B
A=X+Y:B=X*Y
END

変数=CALL( 関数名 [,引数…] )

指定名称を持つユーザー定義関数を呼び出す

引数

関数名

・呼び出すユーザー定義関数名の文字列
・文字列なので""でくくるか文字列変数を使用

引数

指定した関数に必要な引数を列挙

A=CALL("USERFC",X,Y)
'
DEF USERFC(X,Y)
RETURN X*Y
END

CALL SPRITE

SPRITEコールバックの呼び出し

・SPFUNCで設定されたSPRITE毎の処理を一斉呼び出し

CALL SPRITE

↑目次に戻る