Lt304888.ru

Туристические услуги

Анонимная функция

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; }
[1]

В С++14 добавят возможность использовать лямбда функции с auto

[] auto lambda = [](auto x, auto y) {return x + y;};
[2]
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}
[3]
Lua
function(x,y) return x+y end
Maple
(x, y) -> x + y
Mathematica
#1+#2&

или

Function[#1+#2]

или

Function[{x,y},x+y]
[4]
MATLAB
f=@(x,y) x+y
Perl
sub { return $_[0] + $_[1] }
[5]
PHP
// PHP 5.3
function($x, $y) { return $x + $y; }

[6]

// PHP 4 >= 4.0.1, PHP 5
create_function('$x, $y', 'return $x + $y;')

[7]

Python
lambda х, у: х+у
[8]
R
function(x,y) x+y
Ruby
proc{|x,y| x + y }
[9]
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}

Примечания

  1. C++11. Лямбда-выражения
  2. Trip Report: ISO C++ Spring 2013 Meeting (20 April 2013). Проверено 14 июня 2013.
  3. Описание в справочнике «Ядро JavaScript»
  4. Mathematica Documentation: Function (&)
  5. perldoc perlref (англ.)
  6. PHP Manual
  7. PHP Manual
  8. Раздел учебника «Освой Python за 24 часа самостоятельно»
  9. Описание в книге «Programming Ruby» (англ.)

См. также

Анонимная функция.

© 2020–2023 lt304888.ru, Россия, Волжский, ул. Больничная 49, +7 (8443) 85-29-01