関数の定義

PROCEDURE-FEND
戻値のない自作関数を定義する。
FUNCTION-FEND
戻値のある自作関数を定義する。

引数

値渡し

引数として変数などを指定する際、その値のみを渡す方法のこと。渡された引数の値を変更しても呼び出し元の変数の値は更新されないです。

以下のプログラムの場合、「1」が出力されます。

DIM i = 1 increment(i) PRINT i PROCEDURE increment(n) n = n + 1 FEND

参照引数

引数として変数などを指定する際、変数を共有する渡し方のこと。仮引数に対する操作がそのまま実引数に反映されます。

以下のプログラムの場合、「2」が出力されます。

DIM i = 1 increment(i) PRINT i PROCEDURE increment(Var n) n = n + 1 FEND

実引数・仮引数

DIM a = 1 DIM b = 2 PRINT calcAdd(a, b) FUNCTION calcAdd(x, y) RESULT = x + y FEND

実引数

実引数とはその関数を実際に使用するときに関数に引き渡される引数のことです。上記プログラムではcalcAdd関数を呼び出すときの引数a,bが実引数です。

仮引数

仮引数とは関数定義時に使用される引数のことです。上記プログラムではcalcAdd関数の引数x,yが仮引数です。

デフォルト引数

デフォルト引数とは、引数に初期値を設定する機能のことです。関数を呼び出すときに、引数を指定していればその値が使用され、引数が省略された場合はデフォルト値が代わりに使用されます。デフォルトパラメータ以降に通常引数を書く事はNG。

例えば、GETID関数を自分で書くとすれば以下のような感じになります。

GETID( タイトル, [クラス名, 待ち時間秒, MDI子タイトル] )
FUNCTION GETID(title, class = NULL, waitTime = 0, mdiTitle = NULL) 処理 FEND

タイトルは必須だが、クラス名・待ち時間秒・MDI子タイトルは必須ではなく、省略することができます。待ち時間秒はデフォルトの値が0なので「waitTime = 0」となります。これで値が指定されたときはその値、省略されたときは「0」が代入されます。

関数を定義する位置

自作関数はメインルーチンの最後に記述します。以下のように途中に記述すると「abc」は出力されますが、「123」は出力されません。

PRINT "abc" PROCEDURE func() …処理… FEND PRINT "123"

以下のように記述すると「abc」も「123」も出力されます。

PRINT "abc" PRINT "123" PROCEDURE func() …処理… FEND