Unity & C# 学習教材

省略可能パラメータと名前付き引数

メソッド呼び出しでは、毎回すべての引数を同じ形で書く必要はありません。省略可能パラメータと名前付き引数を使うと、呼び出し方を柔軟にできます。

学習目標

前提知識


1. 省略可能パラメータ

省略可能パラメータは、デフォルト値を持つパラメータです。呼び出し側はその引数を省略できます。

書式:省略可能パラメータ

1
2
3
4
戻り値の型 メソッド名(型 必須引数, 型 引数名 = デフォルト値)
{
    処理
}
要素 説明
必須引数 呼び出し時に必ず渡す引数
引数名 省略可能にする引数
= デフォルト値を設定する記号
デフォルト値 省略時に自動で使われる値
1
2
3
4
5
6
7
8
9
10
11
class A
{
    public void M(int x, int y = 0)
    {
        Console.WriteLine($"A.M: x={x}, y={y}");
    }
}

var a = new A();
a.M(1);
a.M(1, 2);
1
2
A.M: x=1, y=0
A.M: x=1, y=2

省略可能パラメータは、必ずパラメータリストの末尾に置きます。途中に置くと、どの引数を省略したのか判定できなくなるからです。


2. 名前付き引数

名前付き引数は、どのパラメータにどの値を渡すかを明示する書き方です。

書式:名前付き引数

1
2
メソッド名(引数名: 値)
メソッド名(引数名1: 値1, 引数名2: 値2)
要素 説明
引数名 メソッド定義側のパラメータ名
: 名前と値を結びつける記号
実際に渡す値

名前付き引数を使うと、順番を入れ替えて書けます。

1
2
3
4
5
6
7
8
9
10
11
class A
{
    public void M(int x, int y = 0)
    {
        Console.WriteLine($"A.M: x={x}, y={y}");
    }
}

var a = new A();
a.M(y: 5, x: 1);
a.M(x: 1);
1
2
A.M: x=1, y=5
A.M: x=1, y=0

一部だけ名前付きにすることもできます。ただし、必須の引数は省略できません。たとえば void M(int x = 0, int y = 0) のように両方が省略可能なら M(y: 5) と書けます。


3. params

params の詳細な説明と動作については params キーワード を参照してください。


4. 省略可能パラメータと名前付き引数をまとめて確認する

1
2
3
4
5
6
7
8
9
10
11
12
class A
{
    public void M(int x, int y = 0)
    {
        Console.WriteLine($"A.M: x={x}, y={y}");
    }
}

var a = new A();
a.M(1);           // y は省略 → y=0
a.M(1, 2);
a.M(y: 5, x: 1); // 名前付き引数
1
2
3
A.M: x=1, y=0
A.M: x=1, y=2
A.M: x=1, y=5

よくあるミス

ミス①:省略可能パラメータを必須パラメータより前に置く

1
2
3
4
5
// ❌ NG: 省略可能パラメータの後ろに必須パラメータを置けない
// void M(int x = 0, int y) { }

// ✅ OK: 省略可能パラメータは末尾に置く
void M(int x, int y = 0) { Console.WriteLine($"A.M: x={x}, y={y}"); }

まとめ


理解度チェック

以下の問いに答えられるか確認しましょう。

  1. 省略可能パラメータが末尾に置かなければならないのはなぜですか?
  2. 次のコードの出力結果は何になりますか?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    class A
    {
        public void M(int x, int y = 10)
        {
            Console.WriteLine($"A.M: x={x}, y={y}");
        }
    }
    
    var a = new A();
    a.M(y: 3, x: 1);
    a.M(5);
    
解答を見る
  1. 呼び出し側の引数をどのパラメータに割り当てるかを曖昧にしないためです。
  2. 1
    2
    
       A.M: x=1, y=3
       A.M: x=5, y=10
    

次のステップ

params キーワード では、params の動作とコンパイラの変換、制約を詳しく学びます。