lambda expression
from https://qiita.com/RyotaMurohoshi/items/740151bd772889cf07de
ラムダ式の登場
匿名関数の一つである匿名メソッドによりインラインで処理を記述してデリゲートを作ることが可能になりました。ですが匿名メソッドはラムダ式に比べると冗長です。
デリゲートの生成はC# 3.0で加わったラムダ式を用いることでより簡潔になります。先ほどの匿名メソッドを用いたデリゲート生成を再掲します。
Func<string, bool> predicate = delegate (string str) {
return str.Length < 5;
};
これをラムダ式で書き換えます。
// ラムダ式で匿名メソッドを書き換え
Func<string, bool> predicate = (string str) => {
return str.Length < 5;
};
delegateが無くなって、違う位置に=>が挿入されましたね。この記述だとあまり短くなっていませんが、ラムダ式はさらに短くすることが可能です。// ラムダ式をさらに短く
Func<string, bool> predicate = str => str.Length < 5;
上記のように短くなっていても、『stringを引数にとってその長さが5未満ならば真(true)、そうでないならば偽(false)を返す処理を参照するデリゲート、ということは変わっていません。(「処理」と書きましたが、実際はメソッドを参照しています。これについては後述します)
ラムダ式の記法についてや型の推論については、いろいろな方が多く投稿されているので本投稿ではどのように記述できるかはこれ以上触れません。
大切なのは、
- 匿名関数を使えばインラインでデリゲートの処理を記述し、デリゲートを生成できる
- 匿名関数の一つはラムダ式
- もう一つの匿名関数である匿名メソッドよりも簡潔に記述することができる
- C# 3.0以降であれば匿名メソッド式でなく、ラムダ式を使うべき
ということです。
ラムダ式はデリゲート生成のためだけのものではない
ラムダ式は匿名関数の一つで、デリゲートを生成することができます。しかしラムダ式の機能はそれだけではありません。もう一つ機能があります。ラムダ式は式ツリー(式木)の生成にも用いることができるのです。
今回は、「ラムダ式はデリゲートの生成だけのものではない」ということだけ覚えておいてください。
留言
張貼留言