ラムダ式は最初に説明したように、メソッドを省略して記述できる記法です。
ラムダ式は、ラムダ演算子 => を利用し、
アクセス修飾子、メソッド名、戻り値の型、引数の型を省略した上で、
引数と処理のみを記述します。
引数と戻り値については、ラムダ式では型推論の機能が自動的に備わっているため、
変数名だけを宣言すればよい(処理の内容を元に、プログラム側で型を自動的に認識)することになります。
(C# における式書式には return が自動的につくため、必ず void 以外の戻り値を持つことになります。)
型は省略されていますが、任意の変数名をつけることが出来ます。
下記の記述が、
アクセス修飾子、メソッド名、戻り値の型、引数の型を省略した上で、
引数用の変数と処理のみを記述した、ラムダ式によるメソッドの書式です。
(引数) => { 処理 }
別の書き方をすると、下記のような意味になります。
(引数の変数) => {メソッドの中身(処理)}
<例>
上記の書式になぞらえて、メソッドをラムダ式で記述した処理の例です。
(x, y) => { return x + y; }
このような書式でメソッドを作成することができます。
では、これはいったいどのような処理なのでしょうか?
メソッドがどのようにして省略されてここに至るのか、順番に過程を解説します。
下記のようなメソッドがあったとします。
このメソッドの引数と処理の内容が、上記のラムダ式で利用されている部分になります。
なぜなら、ラムダ式では引数と処理だけを書けばメソッドとして認識されるためです。
private int CalSum( int x , int y)
{
return x + y;
}
↓
上記の処理を省略して記述することで
(x, y) => { return x + y; }
こうなります。
では、最初のメソッドを、少しずつラムダ式に近づけていきます。
まず、メソッド内の処理の内容を
横に移動します。
private int CalSum( int x , int y) { return x + y; } // ← ここに移動
続いて、
アクセス修飾子を省略します。
ラムダ式は引数や変数に格納して使うので、アクセス修飾子は不要です(常にローカル扱いです)
↓
private int CalSum( int x , int y) { return x + y; }
こうなりました。
int CalSum( int x , int y) { return x + y; }
ここでラムダ式の記法に変更することで、
関数名を省略します。
また、戻り値と引数が型推論になるため、
戻り値と引数の型の宣言を省略します。
int CalSum(
int x ,
int y) { return x + y; }
↓
こうなりました。
(x,y) => {return x + y;}
これで最初に提示したラムダ式の処理の完成です。
残っている左辺の (x, y) が引数の変数、右辺がメソッド内の処理の内容です。
ラムダ式は読み解くことが非常に難しいため、最初のうちは、このように
1つ1つ処理の流れを分解して理解を深めていくようにしてください。