目次
戻り値のない関数を定義します。
- 構文
- PROCEDURE 関数名( 引数, Var 引数, 引数[ ], Var 引数[ ][ ], 引数 = 定数, … )
処理FEND
- 引数
- 引数 省略可
- 値渡し
- Var 引数 省略可
- 参照元の値が変更されます。参照引数。
- 引数[ ] 省略可
- 配列
- Var 引数[ ][ ] 省略可
- 二次元配列。参照引数。
- 引数 = 定数 省略可
- 関数の呼び出し時に省略された場合に使用されるデフォルト値(デフォルト引数)。
- 戻り値
引数
引数とは、関数やメソッドの呼び出し元と呼び出し先で値をやり取りするための変数やその値のことを指します。引数は、関数が特定の処理を実行するために必要な情報を提供し、関数の再利用性を高めることを可能にします。
引数の基本
関数名のあとに括弧( )を書き、括弧内に引数を記述します。
PROCEDURE 関数名(仮引数)
引数が複数ある場合は、カンマ区切りで必要な数だけ記述していきます。
PROCEDURE 関数名(仮引数1, 仮引数2, 仮引数3, …)
定義した関数が受け取る引数は仮引数と呼ばれ、その関数の中でのみ有効となります。変数の前にVarをつけると参照引数となり、関数内で変更した値が呼び出し元の実引数に代入されます。仮引数の変数名は、実引数と同じ名前である必要はありません。
構文にある引数、Var 引数、引数[ ]、Var 引数[ ][ ]、引数 = 定数は引数の受け取り方を表したもので、この順番ですべて使用しなければならないというものではありません。必要なものを必要な数だけ自由に記述していきます。
仮引数・実引数
関数を定義する際に外部から値を渡される特別な変数として指定されるのが仮引数、関数を呼び出す式において仮引数に対応する式もしくは値が実引数です。プログラム実行時には仮引数が実引数の値を受け取ります。
仮引数
仮引数とは関数で定義される変数のうち、実行時に呼び出し元から渡される値を受けるものをいいます。
以下に示すsum関数では、xとyが仮引数となります。
sum(1, 2)
PROCEDURE sum(x, y)
PRINT x + y
FEND
実引数
実引数とはその関数を呼び出す際に渡す値のことで、関数の動作や結果に影響を与えます。変数や値の他に式を渡すこともできます。
以下に示すプログラムではsum関数に渡すaとbが実引数となります。
DIM a = 1
DIM b = 2
sum(a, b)
PROCEDURE sum(x, y)
PRINT x + y
FEND
引数の渡し方
値渡し
値渡しとは実引数(呼び出し元)の変数の値をコピーする渡し方です。関数内で引数の値を変更しても、呼び出し元の変数に影響を与えることはありません。
以下の例では、初めにnに10が代入されています。func関数に渡したとき仮引数のxに1が加算されていますが、値渡しなので呼び出し元のnの値は更新されず、10が出力されます。
DIM n = 10
func(n)
PRINT n
PROCEDURE func(x)
x = x + 1
FEND
- 結果
10
参照渡し
参照渡しとは実引数(呼び出し元)の参照を渡す方法です。関数内で引数の値を変更すると、呼び出し元の変数の値も変更されます。
以下の例では、初めにnに10が代入されていますが、func関数に渡したとき仮引数のxに1が加算されています。参照引数なので呼び出し元のnの値も更新され、11が出力されます。
DIM n = 10
func(n)
PRINT n
PROCEDURE func(Var x)
x = x + 1
FEND
- 結果
11
引数に渡せるデータの種類
値
値とは文字列や数値のことで、呼び出し元の関数の引数にそのまま指定することで渡すことができます。
func(1, 2)
PROCEDURE func(x, y)
PRINT x + y
FEND
- 結果
3
値が代入された変数も渡すことができます。
DIM a = 1
DIM b = 2
func(a, b)
PROCEDURE func(x, y)
PRINT x + y
FEND
- 結果
3
配列
一次元配列
配列を渡すときは呼び出し元では配列の変数名のみを指定し、呼び出された関数では変数名のあとに[ ](角括弧)をつけて受け取ります。
DIM nums[4] = 0, 1, 2, 3, 4
func(nums) // 配列を渡す
PROCEDURE func(array[]) // 配列を受け取る
PRINT "要素数:" + RESIZE(array)
PRINT array[0]
PRINT array[1]
FEND
- 結果
要素数:4 0 1
二次元配列
二次元配列を渡すときは呼び出し元では一次元配列のときと同様に配列の変数名のみを指定し、呼び出された関数で変数名のあとに[ ](角括弧)を2個つけて受け取ります。
DIM nums[][3] = 0, 1, 2, 3, _
4, 5, 6, 7, _
8, 9, 10, 11
func(nums)
PROCEDURE func(array[][])
PRINT "■要素数"
PRINT "一次元目:" + RESIZE(array)
PRINT "二次元目:" + RESIZE(array[0])
PRINT "----------"
PRINT array[0][0]
PRINT array[0][1]
PRINT array[0][2]
PRINT array[0][3]
FEND
- 結果
■要素数 一次元目:2 二次元目:3 ---------- 0 1 2 3
デフォルト引数
デフォルト引数とは、引数に初期値を設定する機能のことです。関数を呼び出すときに、引数を指定していればその値が使用され、引数が省略された場合はデフォルト値が代わりに使用されます。デフォルトパラメータ以降に通常引数を書くことはできません。
以下のプログラムは、func関数の引数を指定したときとしなかったときの処理の違いを表したものです。1行目は引数に田中を指定しているのでnameには田中が代入され、田中さん、こんにちは!と出力されます。一方で、2行目は引数を指定していないのでnameにはデフォルト引数である名無しが代入され、名無しさん、こんにちは!と出力されます。
func("田中")
func()
PROCEDURE func(name = "名無し")
PRINT name + "さん、こんにちは!"
FEND
- 結果
田中さん、こんにちは! 名無しさん、こんにちは!
戻り値
PROCEDURE-FENDは戻り値のない関数を定義するので変数で受ける必要はありませんが、変数で受けた場合は1バイト整数(符号なし)の0を返します。型はVARTYPE関数 (スクリプト関数)で調べることができます。
PRINT VARTYPE(func())
PROCEDURE func()
// 処理
FEND
- 結果
17
戻り値のある関数を定義するにはFUNCTION-FENDを利用します。