無名関数
コンピュータ・プログラミングにおいて、無名関数とは、識別子に束縛されていない関数定義のことです。 無名関数は、高階関数に渡される引数や、関数を返す必要のある高階関数の結果を返すために使われます。 無名関数は、関数型プログラミング言語や第一級関数を持つ他の言語ではどこにでもあり、他のデータ型に対するリテラルと同様に、関数型に対して同じ役割を果たします。
無名関数は、電子計算機が登場する以前の1936年にアロンゾ・チャーチが発明し、すべての関数が無名であるラムダ計算に由来しています。 いくつかのプログラミング言語では、無名関数はキーワードlambdaを用いて導入され、無名関数はしばしば lambdas または lambda abstractions と呼ばれます。 無名関数は、1958年のLisp以来、プログラミング言語の特徴となっており、最近のプログラミング言語では無名関数をサポートするものが増えている。
Lisp
編集(setq add (lambda (a b) (+ a b))) (apply add '(2 3)) ; 5
C++
編集#include <iostream> int main() { auto add = [](int a, int b){ return a + b; }; std::cout << add(2, 3) << std::endl; // 5 return 0; }
JavaScript
編集- functionキーワード
const add = function(a, b) { return a + b; } console.log(add(2, 3)); // 5
- アロー関数
const add = (a, b) => a + b; console.log(add(2, 3)); // 5
Perl
編集$f = sub { my $x = shift; my $y = shift; return $x * $y; } print $f->(2, 3);
PHP
編集<?php $add = function($a, $b){ return $a + $b; }; echo $add(2, 3); // 5 ?>
Ruby
編集- lambdaキーワード
add = lambda{ |a, b| a + b } puts add[2, 3] # 5
- Procクラス
add = Proc.new{ |a, b| a + b } puts add[2, 3] # 5
- アロー演算子
add = ->(a, b){a + b} puts add[2, 3] # 5
Python
編集add = lambda a, b: a + b print(add(2, 3)) # 5
Lua
編集add = function(a, b) return a + b end print(add(2, 3)) -- 5
Java
編集BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b; System.out.println(add.apply(2, 3)); // 5
C#
編集- 匿名メソッド
Func<int, int, int> add = delegate(int a, int b){ return a + b; }; Console.WriteLine(add(2, 3)); // 5
- ラムダ式
Func<int, int, int> add = (a, b) => a + b; Console.WriteLine(add(2, 3)); // 5
Swift
編集- クロージャ
let add = {(a:Int, b:Int) -> Int in a + b} print(add(2, 3)) // 5
Kotlin
編集- 無名関数
val add = fun(a:Int, b:Int) = a + b println(add(2, 3)) // 5
- ラムダ式
val add = {a:Int, b:Int -> a + b} println(add(2, 3)) // 5
Go
編集f := func(s string) string { return "Hello, " + s + "!" } fmt.Println(f("world"))
D
編集auto f = (int x, int y){ return x * y; };
Zig
編集const f = struct { pub fn func(x:i64, y: i64) i64 { return x * y; } }.func;
- Zigでは、匿名structの公開メンバーへのポインターを返すと無名関数となり、sort()関数などの引数に使うことができます。