Инструменты пользователя
Содержание
Анонимная функция
Анонимная функция в программировании — особый вид функций, которые объявляются в месте использования и не получают уникального идентификатора для доступа к ним. Поддерживаются во многих языках программирования.
Обычно при создании анонимные функции либо вызываются напрямую, либо ссылка на функцию присваивается переменной, с помощью которой затем можно косвенно вызывать данную функцию. Если анонимная функция ссылается на переменные, не содержащиеся в её теле (захват), то такая функция называется замыканием. Лямбда-выражение — типичная для многих языков синтаксическая конструкция для определения анонимной функции.
Синтаксис
Синтаксис записи анонимных функций для различных языков программирования в большинстве случаев сильно различается.
Язык | Пример записи сложения |
---|---|
AS3 |
function(x:int, y:int):int{return x + y;} |
C# |
(x,y) => x+y |
C++ |
Введены в C++11. Полная форма1):[захват](параметры)mutable исключения атрибуты->возвращаемый_тип{тело} Обязательно должны присутствовать захват и тело. Пример2): [](int x, int y){ return x + y; }
В С++14 была добавлена возможность использовать лямбда-функции с [] auto lambda = [](auto x, auto y) {return x + y;}; Анонимная функция может захватывать как отдельные переменные, например: int a; auto f = [a](){return a;}
так и все внешние переменные: по ссылке |
CoffeeScript |
(x, y) -> x + y |
PascalABC.NET |
(x, y) -> x + y |
D |
// короткая форма записи с автовыводом типов auto a = ((x, y) => x + y)(2, 3); // длинная форма записи (блок с фигурными скобками) с автовыводом типов auto aa = (x, y) { return x + y; }(2, 3); // автоопределение компилятором типа анонимной функции: функция или делегат auto b = (int x, int y) => x + y; auto bb = (int x, int y) { return x + y; }; // функции не имеют доступа к внешним переменным auto c = function(int x, int y) => x + y; auto cc = function(int x, int y) { return x + y; }; // делегаты имеют доступ к внешним переменным auto d = delegate(int x, int y) => x + y; auto dd = delegate(int x, int y) { return x + y; }; // делегат, принимающий переменную типа int и возвращающий значение типа double auto f = delegate double(int x) { return 5.0 / x; }; |
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 |
var square = function(number) {return number * number}; 4) В ECMAScript 6 (также известном как ECMAScript 2015) были добавлены Arrow Functions: var sum = (x,y) => 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 |
Maxima |
lambda([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, Common Lisp |
(lambda (x y) (+ x y)) |
SML |
fn (x, y) => x + y |
Visual Prolog |
{(X,Y)=X+Y} |
См. также
Инструменты страницы