ラムダ式の進化:C# 12でのパラメータ既定値の導入
C# 12では、ラムダ式のパラメータ(Default lambda parameters)に既定値を定義できるようになりました。
ラムダ式とは匿名関数(無名関数)のことで、デリゲート型(関数を参照できる型)の初期化など関数を受け取ることのできる局面で、定義済みの関数の代わりに関数を直接記述する記法をいいます。ラムダ式は、以下のようにラムダ宣言演算子(=>)を使って記述します。
(パラメータ) => 式 式形式
(パラメータ) => { 文... } ステートメント形式
従来は、このラムダ式のパラメータには既定値が指定できず、そのため省略もできないという制約がありました。通常の関数では、オプション引数(仮引数に指定される既定値)による既定値の指定が可能でしたが、これがラムダ式でも可能になりました。これにより、ラムダ式においても値の省略による呼び出しの簡略化や、パラメータの増加によるコードの修正が不要になるなどのメリットがあります。
ラムダ式におけるオプション引数も、通常の関数と同様に以下のリストのように指定できます。
var func1 = (int a = 0) => a; // 引数aの既定値は0 Console.WriteLine(func1()); // 省略時。実行結果:0 Console.WriteLine(func1(3)); // 引数を指定。実行結果:3
さらに、ラムダ式においてもparamsパラメータ(可変長の引数)が利用できるようになりました。これにより、関数に渡すためだけの一時的な配列を作る必要がなくなり、コードがより簡潔かつ効率的になります。
var func2 = (params int[] a) => a.Sum(); Console.WriteLine(func2(1, 2, 3, 4, 5)); // 実行結果:15
まとめ
今回は、クラスでも利用可能になったプライマリコンストラクタ、より簡潔な記述が可能になったコレクション式、左辺値参照のみを読み出し専用にするref readonly修飾子、パラメータのデフォルト値が設定可能になったラムダ式を紹介しました。
次回は、型エイリアス、インライン配列、Experimental属性、インターセプタを紹介します。
