2007年08月17日

C#3.0:ラムダ式

   このエントリーをはてなブックマークに追加 Clip to Evernote
ラムダ式

delegate int MyFunction(int i);

static int Triple(int n) {
return n * 3;
}

static void Test() {
// C#1.1
MyFunction f = new MyFunction(Triple);
int n = f(11);
Console.WriteLine(n);
}

このコードは、delegateの動きを説明した C#1.1のコード。

これが、C#2.0になると、こんな書き方になる。

delegate int MyFunction(int i);

static void Test() {
// C#2.0 匿名メソッド
MyFunction f3 = delegate(int x) { return x * 3; };
n = f3(20);
Console.WriteLine(n);
}

わざわざ Tripleというメソッドを定義する必要がなくなったわけだ。

そして、C#3.0では、

delegate int MyFunction(int i);

static void Ramda() {
// C#3.0 ラムダ式
MyFunction f4 = (int x) => { return x * 3; }; // (*)
n = f4(30);
Console.WriteLine(n);
}

ここまでは、C#2.0 と C#3.0 では、記述方法が変化しただけと見ることもできる。
さらに、

    MyFunction f4 = (int x) => return x * 3;    // (*)

と書ける。さらに、この(*)の記述が、

    MyFunction f4 = (int x) => x * 3;

    MyFunction f4 = (x) => x * 3;

    MyFunction f4 = x => x * 3;

と短くすることができる。

いきなり、最後の文を見せられたときは、いきなり出てきた xって何だ?
と面食らったけど、順番に見ていけば、それほど難しくはない。
でも、慣れるのが大変そう。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51061352
この記事へのトラックバック
計算モデル論入門―チューリング機械からラムダ計算へ (Information Science & Engineering (F5))(2006/12)井田 哲雄、浜名 誠 他商品詳細を見る 「計算理論??..
計算モデル論入門―チューリング機械からラムダ計算へ【積読Blog】at 2008年04月30日 07:38
前回の記事 では、Sum関数と、それをカリー化した CurriedSum関数を示しましたが、F#では、この Sum関数は、 let Sum a b = a + b と書けます。Visual Studio
F#: カリー化と部分適用をC#で考えてみる(2)  int -> int -> int って何だ?【Gushwell's F# Programming Diary】at 2009年06月22日 23:07