Home >

ラムダ式は匿名のメソッドなどと呼ばれたりしますが、そう言われてもまったくピンときません。 何度見てもわからないラムダ式を順番に解説していきたいと考えています。


1.ここから全てが始まった

それまでの言語(C言語やC++など)ではメソッド自体を変数に格納したり、引数として別のメソッドに渡すなどとという芸当はできませんでした ※1。 しかしC#言語でついにメソッドを格納できる型、デリゲート型が登場しました! これによってプログラムの書き方は大きく変化していきます。 デリゲート型は実行できるコードを格納(参照)することができる型です。 その型を使って変数を作成することによって実行できるコードを格納する事ができます。


2.デリゲート型はこんなお方

デリゲート型は次のように宣言します。


delegate 戻り値の型 名前(引数リスト);

デリゲート型は実行したいコード(メソッド)の宣言に従って作成する必要があります。 例えば戻り値を持っているとか、持っていないとか。また引数は何とか、引数の数は?とか 格納するメソッドの宣言に応じた型が必要になります。 そんな面倒なことをしなくてもよいようにあらかじめ定義されたActionとFuncという定義済みデリゲート型があります。 一般的に使われるメソッドの型を定義している型になります※2。

デリゲート型を使用して定義済みデリゲート型として宣言されています。


public delegate void Action()

public delegate TResult Func<in T, out TResult>(
	T arg
)


3.定義済みデリゲート型を使ってみる

定義済みのデリゲート型を使ってみます。 実行できるプログラムを変数に格納して実行します。

using System;

class Program
{
	//	メインプログラム。ここからスタート!
	static void Main()
	{
		//	変数actionにsampleメソッドを格納する
		Action action = sample;
	
		//	変数actionを使って実行
		action();
	}

	//	格納されるsampleメソッド
	private static void sample()
	{
		Console.WriteLine("Hello lambda");
	}
}

次のようにラムダ式風に書くこともできます。


	//	変数actionにメソッドを代入してみる
	Action action = () =>
	{
		Console.WriteLine("Hello lambda");
	};
	
	//	変数actionを使って実行
	action();

2行目でaction変数に実行できるコードを代入し8行目で呼出しています。

もうおわかりでしょうか?。

ラムダ式とはデリゲート型の変数に格納できるような形式で書かれた式の事なんです。


4.ラムダ式の書き方

ラムダ式を作成するには、ラムダ演算子 (=>)を使用します。 左側に引数。右側に実行プログラムを指定します。


	引数 => 実行プログラム;

引数の数によって書き方が多少変わりますが、そのあたりは別サイトで詳しく説明しています。 詳しく知りたい方はぐぐってみてください。

今までのおさらいをしてプログラムを作成してみたいと思います。 ズバリ!。消費税を計算するラムダ式!。


using System;

class Program
{
	//	消費税を計算するメソッドを格納するためのデリゲート型を作成
	delegate float calctax(float f);  
	
	//	メインプログラム。ここからスタート!
	static void Main()
	{
		//	calctax型に実行プログラムを格納
    	calctax taxDelegate = x => x * 1.08F;  

		//	calctax型の変数に引数を渡してプログラムを実行し結果を得る		ftaxは108となる。
    	float ftax = taxDelegate(100.0F);
    	Console.WriteLine(ftax);
	}
}

ここまで書いている自分でも、これのいったいなにが便利なの??? と思わざる得ない。これからどういった時に使用すべきかなど使い方についても書いていきたい。