ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

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 を引数に付け、配列にすることで可変長変数の関数が定義できる」