Scala Language Funciones anónimas


Ejemplo

Las funciones anónimas son funciones que están definidas pero no se les asigna un nombre.

La siguiente es una función anónima que toma dos enteros y devuelve la suma.

(x: Int, y: Int) => x + y

La expresión resultante se puede asignar a un val :

val sum = (x: Int, y: Int) => x + y

Las funciones anónimas se utilizan principalmente como argumentos para otras funciones. Por ejemplo, la función de map en una colección espera otra función como argumento:

// Returns Seq("FOO", "BAR", "QUX")
Seq("Foo", "Bar", "Qux").map((x: String) => x.toUpperCase)

Los tipos de los argumentos de la función anónima se pueden omitir: los tipos se deducen automáticamente :

Seq("Foo", "Bar", "Qux").map((x) => x.toUpperCase)

Si hay un solo argumento, se pueden omitir los paréntesis alrededor de ese argumento:

Seq("Foo", "Bar", "Qux").map(x => x.toUpperCase)

Subraya la taquigrafía

Hay una sintaxis aún más corta que no requiere nombres para los argumentos. El fragmento anterior se puede escribir:

Seq("Foo", "Bar", "Qux").map(_.toUpperCase)

_ representa los argumentos de la función anónima en posición. Con una función anónima que tiene múltiples parámetros, cada aparición de _ se referirá a un argumento diferente. Por ejemplo, las dos expresiones siguientes son equivalentes:

// Returns "FooBarQux" in both cases
Seq("Foo", "Bar", "Qux").reduce((s1, s2) => s1 + s2)
Seq("Foo", "Bar", "Qux").reduce(_ + _)

Al usar esta abreviatura, cualquier argumento representado por la posición _ solo puede ser referenciado una sola vez y en el mismo orden.

Funciones anónimas sin parámetros

Para crear un valor para una función anónima que no toma parámetros, deje la lista de parámetros en blanco:

val sayHello = () => println("hello")