Open棟梁Project - マイクロソフト系技術情報 Wiki
ラムダ式っておじさん達には一瞬なんだかよく解りませんが、
Java 8でもラムダ式がサポートされたようなので、私を含めて、
そろそろラムダ式をちゃんと覚えようという人向けのコンテンツを書いてみました。
おじさん達の知識で振り返って分析してみると、
中水準言語のC言語の関数ポインタから、
高水準言語の.NET言語(C#、VB)で、
と進化してきていることぐらいは解る(?)と思います。
これを見ると、
厳密には、
というふうに進化してきています。
ラムダ式は、LINQクエリ式やデリゲートと多用する
新しいAPIの使い勝手を良くするために生まれてきたようです。
C#言語のラムダ式(lambda expressions)とは、
デリゲート(delegate)や、メソッド・ベースのLINQ文の(例えば)
WhereメソッドやSelectメソッドなどの引数をシンプルに記述するために、
C# 3.0(=Visual C# 2008)以降で導入された言語仕様である。
これについては、以下の利用例を引き合いに出して説明したいと思います。
() => { (式形式の実装) }
(引数名) => { (式形式の実装) }
(引数名1,引数名2,引数名3, ...) => { (式形式の実装) }
() => (ステートメント形式の実装)
引数名 => (ステートメント形式の実装);
(引数名1,引数名2,引数名3, ...) => (ステートメント形式の実装)
以下の場合、仮引数(parameter)を指定する。
このため、一瞬どこから現れたのか不明な変数に見える。
LINQのメソッド ベースのクエリ構文などで使用される。
上記以外の場合は、実引数を指定する。
ラムダ式では、そのスコープの外側にある
変数やメソッドを利用でき引数の肥大化が防げる。
(これは、匿名メソッド・匿名関数でも同じ)
ということで、引数をラムダ式にすることで、
以下のような効果が期待できるようなシーンが、
ラムダ式の代表的な利用ケースではないか?と思います。
ラムダ式を使った方が、型推論の恩恵を存分に受けられ、書き方がぐっとシンプルになる。
var query5 = RowList .Where(p => p.Field<int>("年度") == 2012) .Select(p => new { 年度 = p.Field<int>("年度"), 種別 = p.Field<int>("種別"), 生年度 = p.Field<int>("生年度"), 平均人員2 = p.Field<int>("平均人員") / 12, 支給年金額 = p.Field<int>("支給年金額") });
新しい WebGrid?<T> 実装では、format パラメーターに
Func<T, object> を受け取る新しい Column メソッドを追加しています。grid.Column( columnName: "EmailAddress", header: "Email Address", format: item => Html.EmailLink( (string)item.EmailAddress, (string)item.EmailAddress, "" ), canSort: false )
Tags: :.NET開発