Lambdas
We have seen that function are declarated by given them a name, parameters and a body. Sometimes we need a function that is used only once, and hence does not deserve to have a name (perhaps not only difficult to come up with, but also would incur a slight risk of clutter of the scope, or even capture). In other words, we need function expressions. Those are sometimes called lambdas or anonymous functions.
First, let us see how to declare functions with function expressions, instead of the dedicated syntax we already know. This is a useful exercise, before we see more useful use-cases.
Function expressions are called arrow functions in JsLIGO:
Note that when there is a single parameter that is not given a type, the parentheses are not necessary, but they are if the return type is give, like so:
We understand that (x,y) => x + y
is an expression, and we can use
it without a name in contexts where functions of type (x: int, y: int) =>
int
are valid. In the dedicated sections on lists, maps and sets, we
present how lambdas are most useful.
Note: When a function takes one argument that is a tuple, parentheses are mandatory, like so:
That function is different from
(x,y) => x + y
, which takes two arguments. In other words,sum
has type(x: int, y: int) => int
andcomp_sum
has type([x,y] : [int,int]) => int
.