05-07-2023
Анонимная (безымянная) функция — в программировании особый вид функций, которые объявляются в месте использования и не получают уникального идентификатора для доступа к ним. Обычно при создании они либо вызываются напрямую, либо ссылка на функцию присваивается переменной, с помощью которой затем можно косвенно вызывать данную функцию.
Синтаксис записи анонимных функций для различных языков программирования в большинстве случаев сильно различается.
Язык | Пример записи сложения |
---|---|
AS3 |
function(x:int, y:int):int{return x + y;} |
C# |
(x,y) => x+y |
C++ | Введены в с++11. Общая форма:
[capture](parameters)->return-type{body} или [capture](parameters){body} Пример: [](int x, int y){ return x + y; } В С++14 добавят возможность использовать лямбда функции с [] auto lambda = [](auto x, auto y) {return x + y;}; |
CoffeeScript |
(x, y) -> x + y |
PascalABC.NET |
(x, y) -> x + y |
D |
delegate(int x, int y){ return x+y; } |
Delphi (c 2009 версии) |
function(x, y: integer): integer begin result := x+y; end; |
Erlang |
fun(X,Y)->X+Y end |
Scala |
Без указания контекста надо указывать тип переменных: (X:Int,Y:Int)=>X+Y Но в местах, где тип может быть выведен, можно использовать сокращенные формы: (1 to 100) reduce ((a, b) => a+b) Или ещё короче, с использованием автоподстановок '_': (1 to 100) reduce (_ + _) |
GNU Octave |
@(x,y)x+y |
Groovy |
{x, y -> x + y} |
Haskell |
\x y -> x + y |
Java (с версии 8) |
// with no parameter () -> System.out.println("Hello, world."); // with a single parameter (This example is an identity function). a -> a //with a single expression (a, b) -> a + b // with explicit type information (Long id, String name) -> "id: " + id + ", name:" + name // with a code block (a, b) -> {return a + b;} // with multiple statements in the lambda body. It require a code block. // This example also includes a nested lambda expression as well as a closure. (id, newPrice) -> { Optional<Product> mayBeProduct = findProduct(id); mayBeProduct.ifPresent(product -> product.setPrice(newPrice)); return mayBeProduct.get(); } |
JavaScript |
function(x,y) {return x+y} |
Lua |
function(x,y) return x+y end |
Maple |
(x, y) -> x + y |
Mathematica |
#1+#2& или Function[#1+#2] или Function[{x,y},x+y] |
MATLAB |
f=@(x,y) x+y |
Perl |
sub { return $_[0] + $_[1] } |
PHP |
// PHP 5.3 function($x, $y) { return $x + $y; } // PHP 4 >= 4.0.1, PHP 5 create_function('$x, $y', 'return $x + $y;') |
Python |
lambda х, у: х+у |
R |
function(x,y) x+y |
Ruby |
proc{|x,y| x + y } |
Rust |
| x: uint, y: uint | x + y |
Scheme |
(lambda (x y) (+ x y)) |
SML |
fn (x, y) => x + y |
Visual Prolog |
{(X,Y)=X+Y} |
Анонимная функция.