Funciones de orden superior

Programación funcional y reactiva - Computación

Profesor: Ing. Santiago Quiñones

Docente Investigador

Departamento de Ingeniería Civil

Contenidos

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

B1S3 Funciones Orden Superior

By Santiago Quiñones Cuenca

B1S3 Funciones Orden Superior

Funciones matemáticas como código utilizando funciones de orden superior.

  • 133