C# - params:関数の引数の個数を可変にする
初めに
C# では params を用いて、関数の引数の個数を可変にすることができます。本記事ではその方法をまとめます。
定義の仕方
サンプルコード
using System; using UnityEngine; public class ParamsTest : MonoBehaviour { void Start() { float a = 3, b = 6, c = 100, d = -120.5f; //関数の呼び出し //こちらの引数を任意の数いれると、自動的にその配列を作ってくれる float ave = Average(a, b, c, d); Debug.Log($"平均値{ave}"); } //引数にparams をつけ、配列にする float Average(params float[] num) { float sum = 0; foreach (float x in num) { sum += x; } float ans = sum / num.Length; return ans; } }
※Unity上で動かすため、using UnityEngine と Debug.Log を使っています。
説明
上のサンプルコードを用いて説明します。
(定義の仕方)
//引数にparams をつけ、配列にする float Average(params float[] num) { //略 }
引数に params をつけ、配列にします。上の定義では、float をいくらでも引数にとることができます。
(呼び出し方)
float a = 3, b = 6, c = 100, d = -120.5f; //関数の呼び出し //こちらの引数を任意の数いれると、自動的にその配列を作ってくれる float ave = Average(a, b, c, d);
関数を通常通り呼び出せばよいです。今回は float[] を引数にとるので、float の変数を引数にしています。
補足
引数なしで呼び出した場合
params をつけ、引数の個数を可変にした関数を引数なしで呼び出した場合、引数には空配列(長さ0の配列)が入ります。
上記のサンプルコードの場合は、平均値を計算するときに分母が 0 になるため、NaN が返ってきますが、確かめると引数の長さが 0 になっていることがわかります。
params をつけた関数の引数に配列を入れた場合
下のコードのように、引数に params がついていても、普通に配列を引数にすることができます。
using System; using UnityEngine; public class ParamsTest : MonoBehaviour { void Start() { float[] numbers = new float[3] { 3, 5, 9 }; float ave = Average(numbers); //引数を配列に Debug.Log($"平均値{ave}"); } float Average(params float[] num) { //省略 } }
最後に
「params を引数に付け、配列にすることで可変長変数の関数が定義できる」