関数のオーバーロード
以下のプログラムを見てみましょう。
float a = random(100);
float b = random(-100, 100);
println(a, b);
1 行目では、random
関数に引数を 1 つ渡して 0 以上 100 未満の乱数を取得しています。
2 行目では、random
関数に引数を 2 つ渡して -100 以上 100 未満の乱数を取得しています。
Processing では、このように引数の異なる同名の関数を定義できます。
これを関数の オーバーロード と呼びます。
Processing の組み込み関数には、様々なところで関数のオーバーロードが使用されています。
例えば、println
関数は文字列だけでなく整数や実数を表示してくれます。
また、fill
関数は引数に整数値を 1 つ渡すとグレースケールで色が設定され、整数値を 3 つ渡すと RGB 値で色が設定されます。
このように、引数の渡し方によって自然に関数の動作を変えることができます。
これらは関数のオーバーロードによって実現されています。
自作関数で関数のオーバーロードをしてみましょう。
乱数を用いて整数値をランダムに返す関数 randomInt
を作成します。
random
の例と同じように、引数が 1 つの場合は乱数の上限のみを、引数が 2 つの場合は乱数の加減と上限を設定します。
プログラムは以下のようになります。
int randomInt(int min, int max) {
return int(random(min, max));
}
int randomInt(int max) {
return randomInt(0, max);
}
void setup() {
noLoop();
}
void draw() {
int a = randomInt(10, 100);
int b = randomInt(50);
println(a, b);
}
同名の randomInt
関数が宣言されていますが、それぞれ引数が異なります。
1 つ目は整数値の引数を 2 つ取ります。
2 つ目は整数値の引数を 1 つ取ります。
次頁で扱いますが、 2 つ目の randomInt
から 1 つ目の randomInt
を呼び出すことで同じ処理を繰り返し書くことを避けています。