Programación funcional y reactiva - Computación
Transformación de funciones a funciones anónimas
Funciones matemáticas a código.
Definir función que tome un entero n y calcule el factorial de n
Funciones sin nombre
a veces, una función no necesita un nombre
Función factorial, como una función sin nombre
Expresiones, funciones y funciones sin nombre
Función sin nombre
Funciones en Scala son considerados valores, significa podemos asignar un valor
Función sin nombre
las funciones se puede utilizar sin nombrarlas
funciones sin nombre son útiles cuando se envían como argumentos a otras funciones
Funciones sin nombre
Análisis
Funciones sin nombre
Análisis
Funciones sin nombre
Determinar si un número es primo
fórmula define:
rango de enteros 2 a n-1
todos esos # satisfacen condición (n % k) ≠ 0
Funciones sin nombre
Determinar si un número es primo
Se recomienda, aunque no mandatorio señalar el tipo de las funciones con nombre
Funciones sin nombre
Definición de programación funcional
Es una forma de escribir programas utilizando únicamente funciones de alto orden y valores inmutables
Funciones de orden superior
Funciones de alto orden
Una función es de alto orden cuando
se puede asignar a una variable
pasa como un parámetro
es devuelta por otra función
Funciones de orden superior en la práctica
Asignar una función a un valor
¿Qué hace ésta sentencia?
Funciones de orden superior en la práctica
Asignar una función creada a un valor
¿Y si la función tiene dos o más parámetros?
¿Cuál es el tipo de dato de los valores sum1 y mulSum1?
Funciones de orden superior en la práctica
Una función como parámetro
Funciones de orden superior en la práctica
Una función que devuelve otra función
Funciones de orden superior en la práctica
Una función que devuelve otra función
def greetingI18N(lan: String): String => String = name =>
val english = () => "Hello, " + name
val spanish = () => "Hola, " + name
lan match
case "en" => english()
case "es" => spanish()
case _ => english()
val greetingEn = greetingI18N("en")
greetingEn("Santiago")
val greetingEs = greetingI18N("es")
greetingEs("Santiago")
Funciones de orden superior
Paso a paso
val f2 = (x: Double) => -Math.pow(x, 2) + 8*x - 12
f2(1)
Una función que puede asignarse a un valor
Funciones de orden superior
Paso a paso
Una función se envía como parámetro
Funciones de orden superior
Paso a paso
Una función se envía como parámetro
Funciones de orden superior
Paso a paso
Una función se envía como parámetro
Funciones de orden superior
Paso a paso
Una función que devuelve una función
Calculadora para operar números enteros
def select(option: Char): (Int, Int) => Double = {
option match{
case '+' => (a: Int, b: Int) => a + b
case '-' => (a: Int, b: Int) => a - b
case '*' => (a: Int, b: Int) => a * b
case '/' => (a: Int, b: Int) => a / b.toDouble
case _ => (a: Int, b: Int) => 0 / (a + b)
}
}
// primera forma de invocar
select('+')(2, 1)
// segunda forma de invocar
val operation = select('+')
operation(2, 1)
Funciones sin parámetros
En funciones con o sin nombres