無名関数
出典: フリー百科事典『ウィキペディア(Wikipedia)』
無名関数(anonymous[1] function, nameless function)とは、名前付けされずに定義された関数のことである。無名関数を表現するための方法には様々なものがあるが、近年主流なのはラムダ式による記法である。無名関数を表現するリテラル式は、関数リテラル(function literal)とも呼ばれる。値がある場合は関数オブジェクトであるものが多い。
目次 |
[編集] ラムダ式
ラムダ式(lambda expression)はラムダ計算と関係が深く、関数型言語で特によく採用されている。C++11においても導入された。 Haskellにおける記法はこうである。
(\x y -> x + y) 2 3 == 5 --二つの引数を取ってその和を返す関数。
[編集] 匿名メソッド
//ボタンを押すとメッセージが表示される button1.Click += delegate(System.Object o, System.EventArgs e) { System.Windows.Forms.MessageBox.Show("Click!"); };
C# 3.0以降ではラムダ式も導入されている。ラムダ式のほうが表現の幅が広く、基本的にC#ではラムダ式を用いる。 ただし、匿名メソッドではパラメーターリストを省略できるので、匿名メソッドはさまざまなシグネチャを持つデリゲートに変換でき、ラムダ式では出来ない。この点において匿名メソッドはラムダ式に勝っている。
[編集] JavaScriptの無名関数
JavaScriptではfunctionというキーワードを用いて記述する。
(function(a,b){return a+b;})(2,3) == 5 //二つの引数を取ってその和を返す関数。
[編集] Luaの無名関数
Luaにおける関数は第一級オブジェクトであり、すべての関数が本質的に無名関数である。名前付きの関数とは、関数オブジェクトへの参照を保持する変数にすぎない。
function foo(x) return 2*x end
というコードは、次のコードに対する糖衣構文である。
foo = function(x) return 2*x end
[編集] Pythonの無名関数
Pythonではlambdaというキーワードを使う。Python特有の注意点として、lambdaの内容には式のみが書け、文は書けない点が挙げられる。
(lambda a, b: a + b)(2, 3) == 5 #二つの引数を取ってその和を返す関数。
[編集] 無名関数の特徴
[編集] メリット
- 一度しか使わない関数の名前を付けなくて済む。名前の衝突を考えなくて済む。
- 関数の引数などに直接渡せる。