関数のオーバーロード

以下のプログラムを見てみましょう。

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 を呼び出すことで同じ処理を繰り返し書くことを避けています。

results matching ""

    No results matching ""