Chapter3. ステートメント


3.3 ユーザー関数

関数名
FUNC…RETURN…ENDFUNC
機能
ユーザー関数を登録する。
書式
FUNC 戻り値用変数 ユーザー関数名(引き渡し変数,引き渡し変数]])
…プログラム…
RETURN
…プログラム…
ENDFUNC

解説
関数とは、決まった処理を実行する機能をパッケージ化したもの。そして処理の結果を返す。値を返さないものをサブモジュール(サブルーチン)と言う。
 開発言語等が提供する関数をシステム関数と呼び、ユーザーが登録した関数をユーザー関数と呼ぶ。
 ユーザー関数は、例えばある同じ処理を複数の個所で実行する場合、各個所に同じプログラムを記述するのではなく、その同じ部分を関数とし 1ヶ所に登録しておき、必要なときに呼び出しを行える。
 当システムのユーザー関数は、複数の値を入力として渡すことができ、結果として1つの値を返すことができ。呼び出し元では返された値を変数に代入するなど、システム関数と同じ様に扱える。
 FUNC と ENDFUNC で囲んだ範囲が1ユーザ関数となる。
 ENDFUNC でユーザー関数の処理は終了するが、ユーザー関数の途中で終了したい場合には、RETURN を終了したい所に置けばよい。
 当ステートメントを使うには、以下のような条件がある。
1
ユーザー関数はメインプログラムの途中、及び他のユーザ関数の途中に定義してはいけませんが、メインプログラム及び他のユーザ関数との定義順には制限はない。
2
ユーザー関数内で指定した変数は、STATIC 指定の無い限りローカル変数となり、記述されたユーザー関数内だけで有効な変数となります。ローカル変数は、当該ユーザー関数の処理を抜けると開放される事に注意すること。
3
ユーザー関数は再帰呼び出しを行う事が出来る。再帰呼び出しとは、自関数自身を呼び出すことである。
4
呼び出し元からユーザー関数に対して指定値の引き渡し(引き渡し数に制限はありません)を行う事が出来る。ユーザー関数に引き渡すデータ型や個数は、呼び出し元と呼び出されるユーザー関数で一致させること。
 引き渡しには、変数、配列、文字変数、文字配列を指定できる。
5
ユーザー関数の実行結果を戻り値として呼び出し元に戻す事が出来る。但し、戻り値は特定の1つの変数のみである。複数の値を戻したい場合には、グローバル変数(STATIC)で引き渡しを行うこと。
 戻り値には、変数、配列、文字変数、文字配列を指定できる。
6
引き渡し値、及び戻り値に配列を指定する事は出来るが、配列の全ての情報を引き渡すわけではない。引き渡しは1つの要素だけである。
 配列の全ての情報を引き渡したい場合は、グローバル変数(STATIC)で引き渡しを行うこと。
用例
2つの値をユーザ関数 TASIZAN に引き渡し、2つの値を加えた結果を戻す。
…
X = 10
Y = 22
SUN = TASIZAN( X , Y )
…

//ユーザー関数
FUNC KEKKA TASIZAN( A , B )
  KEKKA = A + B
ENDFUNC
 文字列と数値をユーザ関数 HYOUJI に引き渡し、指定の座標に指定の画面に表示します。
…
CH1=G@SETUP(640,480,8,0)
X=10
Y=20
MOJI="TEST"
SUU=100
HYOUJI(CH1,X,Y,MOJI,SUU)
…

//サブモジュール
FUNC HYOUJI(CC,XX,YY,UMEJI,SUUJI)
G@PRINT(CC,XX,YY,UMEJI+":"+STR(SUUJI))
ENDFUNC
 2つの数値をユーザ関数 HYOUJI2 に引き渡し、2つの値を加えた結果を画面に表示します。
…
STATIC CH1
CH1 = G@SETUP( 640 , 480 , 8 , 0 )
SUU1 = 100
SUU2 = 200
HYOUJI2( SUU1 , SUU2 )
…

//サブモジュール
FUNC HYOUJI2( C , D )
  G@PRINT( CH1 , 50 , 20 , STR( TASIZAN( C , D )))
ENDFUNC

FUNC KEKKA TASIZAN( A , B )
  KEKKA = A + B
ENDFUNC