Definition:anonymous function
無名関数とは、名前(識別子)を持たず、引数と処理内容だけを直接記述して定義される関数である。多くの言語では「ラムダ式(lambda expression)」ともほぼ同義に扱われる。
通常の関数は、例えば f(x) = x + 1 のように f という名前を付けて定義し、以後はその名前を通じて呼び出す。これに対して無名関数は、x を受け取って x + 1 を返すという処理内容だけを、名前を介さずその場に記述する。
数学の写像記法では、これを x ↦ x + 1 のように名前なしで表現できる。この考え方を形式化したのが、Alonzo Churchが1930年代に導入したラムダ計算(λ-calculus)であり、同じ関数は λx.x + 1 と記述される。プログラミング言語における「ラムダ(lambda)」という呼称は、この記法に由来する。
各言語での無名関数の記法例:
lambda x: x + 1x => x + 1(アロー関数)または function(x) { return x + 1; }(無名の関数式)x -> x + 1[](int x) { return x + 1; }lambda { |x| x + 1 } または ->(x) { x + 1 }無名関数は、次のような用途で利用されることが多い。
map、filter、reduce などの高階関数への処理の受け渡し)無名関数は変数に代入して利用することもできる。例えば Python で f = lambda x: x + 1 と書けば、以後 f(2) のように呼び出せる。ただしこの場合も、関数の値そのものは名前を持たずに定義されており、変数 f がその値を参照しているに過ぎない点で、def f(x): return x + 1 による通常の関数定義とは区別される。
また無名関数は、定義された時点のスコープにある変数を捕捉するクロージャ(closure)として機能することが多く、この性質は関数型プログラミングにおいて多用される。
# lambda:通常は無名(変数代入すれば名前は付くが本質的には無名)
square = lambda x: x ** 2
# def:定義時に必ず名前を持つ
def square(x):
return x ** 2
# lambda:単一式のみ。文(statement)は書けない
add = lambda x, y: x + y # OK
# bad = lambda x: print(x); return x # NG(構文エラー)
# def:複数行の文を自由に書ける
def add(x, y):
result = x + y
print(f"計算結果: {result}")
return result
# lambda:式の評価結果が自動的に返る(returnは書かない)
square = lambda x: x ** 2
# def:明示的にreturnが必要
def square(x):
return x ** 2
Mathematics is the language with which God has written the universe.