プログラミング言語の関数の一種で、名前を付けずに定義される関数のことです。
通常、関数は関数名を指定して定義しますが、無名関数では名前を指定しません。典型例な用途には、ほかの関数の引数として関数を渡すことが挙げられます。また、1度しか使わない関数に名前を付けるわずわらしさや、他の名前と衝突することを避ける利点もあります。
無名関数には名前がないので、プログラム内の複数の箇所から呼び出すことや、再帰呼び出しをおこなうことには向いていません。
そもそも無名関数が使えるかどうかも含めて、プログラミング言語ごとの違いがありますが、無名関数の定義のしかたとしては、通常の関数定義から名前の部分だけを省略するかたちである場合も、通常の関数とは異なる方法をとる場合もあります。
// 2つの値を加算して返す無名関数(ラムダ式)
[](int a, int b) { return a + b; };
関数呼び出しのための ()
を付け加えれば、その場で呼び出すことができます。
int result = [](int a, int b) { return a + b; }(100, 200);
これ自体に名前は付いていませんが、変数に受け取ることで、名前を与えて持ち運ぶことができます。
auto add = [](int a, int b) { return a + b; };
(100, 200); // ほかのところで呼ぶ
add(add); // ほかの関数に渡す func
C++ のラムダ式についての詳細な解説は、新C++編「関数ポインタとラムダ式」にあります。
C# には、C# 2.0 の時点で、匿名メソッドと呼ばれる機能があります。匿名メソッドでは、delegateキーワードを用います。
// 2つの値を加算して返す匿名メソッド
delegate (int a, int b) { return a + b; };
// Funcなどで受け取って、ほかの箇所で呼び出すこともできる
<int, int, int> add = delegate (int a, int b) { return a + b; };
Funcadd(100, 200);
その後、C# 3.0 でラムダ式が使えるようになり、現在ではより簡潔なこちらの方法を使うことが一般的となっています。
// 2つの値を加算して返すラムダ式
(a, b) => a + b;
// Funcなどで受け取って、ほかの箇所で呼び出すこともできる
<int, int, int> add = (a, b) => a + b;
Funcadd(100, 200);
ラムダ式の場合、型を明示的に記述しておらず、コンパイラによる型推論に任しています。これが非常に簡潔な記述を可能にしていますが、まれに型推論がうまくできない場面もあり、そうしたときには匿名メソッドを用いる場合があります。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |