[.NET] 名前付き引数のすすめ

C#の4.0からは、オプション引数というものと名前付き引数といういうものが使える。
オプション引数とは、デフォルト値をメソッドに指定できるようになり、デフォルト値が設定されたものは、省略できる。

void order(string menu, string size ="並盛")
{
 Console.Write(menu + size);
}

こんな感じのメソッドがあれば、

order(“ラーメン”);
と引数なしで書けば、並盛 が注文され、
order(“ラーメン”,”大盛”);
と書けば、大盛 が注文される。

さらに、名前付き引数というものがあり、上記の牛丼大盛を
order(size:”大盛”,menu:”ラーメン”);
とかけ、引数の順番に関わらず引数名で値を渡せる。
文字通り、「名前の付いた引数」である。

これだけ見るとあまりメリットがないように見えるが、重要なのはわざわざ変なを例にしているように、トッピングが多くある場合に使える。

void order(string menu, string size ="並盛", bool char_siu = false, bool egg = false, bool laver = false)
{
 var orderContent = menu + size;
 if(char_siu) orderContent += "チャーシュー";
 if(egg) orderContent += "卵";
 if(laver) orderContent += "海苔";
 Console.Write(orderContent);
}

上記のように、いくつかのトッピングがある場合に、チャーシューや海苔はいらないが、卵はつけたい場合に、下記のように書ける。
order(“ラーメン”,”大盛”,egg=true);
今まで、オーバーロードでゴリゴリ書いていたのが一つのメソッドで済む。

順不同で引数が多く必要な場合などに思い出せば、便利かも。

そして、衝撃的事実があった。
VisualBasic.NETでは最初から使えた。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>