viernes, 6 de septiembre de 2019

Scala mixea el mundo orientado a objeto y el mundo funcional.


Scala mixea el mundo orientado a objeto y el mundo funcional. Por esa razón en scala las funciones son ciudadanos de primera clase, es decir que una función es solo otro tipo de dato.

En scala podemos guardar una función en una variable :

import scala.math._
val num = 3.14
val fun = ceil _

Como vemos num vale 3.14 y fun vale ceil _ que es una función.

El _ indica que puede recibir cualquier parámetro, es decir que podemos llamarlo como queramos.

Si ejecutamos este ejemplo con el RELP num va ser de tipo Double y fun (Double) => Double, lo que significa que es una función que recibe un Double y retorna un Double.

Si utilizamos la sintaxis anterior podemos definir la función charAt de la siguiente forma :

val f = (_: String).charAt(_: Int)  // (String, Int) => Char

Otra posible definición puede ser :

val f: (String, Int) => Char = _.charAt(_)

Que puedo hacer con mi variable fun?

Llamar la función :

fun(num) // 4.0

Pasarla por parámetros o retornarla desde una función.

Array(3.14, 1.42, 2.0).map(fun) // Array(4.0, 2.0, 2.0)

Funciones Anónimas: En scala, tambien tenemos funciones anónimas y estas se pueden definir de este modo:

(x: Double) => 3 * x

Por supuesto se puede guardar en una variable :

val triple = (x: Double) => 3 * x

O lo podemos definir así :

def triple(x: Double) = 3 * x

Pero si queremos utilizarla sin nombre podemos hacer :

 Array(3.14, 1.42, 2.0).map((x: Double) => 3 * x)
// Array(9.42, 4.26, 6.0)

También podemos utilizar las llaves :

Array(3.14, 1.42, 2.0).map{ (x: Double) => 3 * x }

Otra forma de escribirlo de forma infija y sin utilizar el punto :

Array(3.14, 1.42, 2.0) map { (x: Double) => 3 * x }

Por ahora eso es totototodo amigos!!

No hay comentarios.:

Publicar un comentario