TomoGのごちゃまぜ倉庫

Unityでオーバーロードを使う

今回はオーバーロードについてのメモ書きです。
おそらく出来る人から見たら常識的なことで
小ネタでも何でもないと思いますがご了承下さい

■そもそもオーバーロードとは

一番かんたんなJava入門

で書かれている通りです。

私はメソッド名(関数名)が同じでも引数の数を変えれば
別のメソッドとして定義されると認識しています。

オーバーロードの使い方1

    private int Sum(int v)
    {
        return v;
    }

    private int Sum(int v , int count)
    {
        int sum = 0;
        for(int i = 0; i < count; i++)
        {
            sum += v;
        }

        return sum;
    }

    private int Sum(int v , int count , int unit)
    {
        int sum = 0;
        for (int i = 0; i < count; i++)
        {
            sum += v;
        }

        return sum + unit;
    }

vは足す数、countは足す回数、unitは合計値に足す数の簡単なプログラムです。
これで同じような処理を1つの関数といて定義することができました。

しかし、同じような処理を行っているにも関わらず、何回もコードを書いています。
もしミスが発覚した場合3箇所修正する必要があります。

なので次のような使い方をすると対処できます


オーバーロードの使い方2

    private int Sum(int v)
    {
        return _Sum(v, 1, 0);
    }

    private int Sum(int v , int count)
    {
        return _Sum(v, count, 0);
    }

    private int Sum(int v , int count , int unit)
    {
        return _Sum(v, count, unit);
    }

    private int _Sum(int v , int count, int unit)
    {
        int sum = 0;
        for (int i = 0; i < count; i++)
        {
            sum += v;
        }

        return sum + unit;
    }

このようにすると、ミスが発覚しても1箇所を変えるだけですべて修正可能。
また各引数の初期値も設定できます

■おまけ オーバーロードを使わない方法

private int Sum(int v , int count = 1 , int unit = 0)
    {
        int sum = 0;
        for (int i = 0; i < count; i++)
        {
            sum += v;
        }

        return sum + unit;
    } 

この書き方でもオーバーロードと同じような処理ができます
しかし欠点として初期値にstatic変数以外使えなくなります
Screen.width、Screen.height等、よく初期値として使用される(と思われる)変数が初期値として利用できなくなる。

なので、オーバーロードの使い方2がオススメ