0Pricing
Scala for Backend Engineering & Functional Programming · Lección

Funciones de orden superior y currificación

Explore conceptos funcionales avanzados, como las funciones de orden superior y la currificación, para crear código flexible y reutilizable.

Funciones de orden superior y currificación es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 3 lecciones en total.

Descubrir las funciones de orden superior

¡Le damos la bienvenida a la lección 2! En la programación funcional, las funciones son potentes. No solo sirven para calcular valores, sino que también se pueden tratar como cualquier otro dato.

Esto significa que las funciones se pueden pasar como argumentos a otras funciones o incluso devolverse como resultados. Cuando una función hace esto, se denomina función de orden superior (HOF).

  • Las HOF reciben una o más funciones como argumentos.
  • Las HOF devuelven una función como resultado.
  • ¡O ambas cosas!

HOF en acción: `map`

Una de las HOF más comunes en Scala es map. Transforma cada elemento de una colección aplicándole una función determinada y devuelve una colección nueva.

Intente ejecutar este sencillo ejemplo:

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(1, 2, 3)
    val doubledNumbers = numbers.map(x => x * 2)
    println(s"Original: $numbers")
    println(s"Doubled: $doubledNumbers")
  }
}

HOF en acción: `filter`

Otra HOF útil es filter. Selecciona de una colección los elementos que cumplen una condición determinada (una función que devuelve un booleano) y crea una colección nueva.

Así puede usar filter para encontrar números pares:

object Main {
  def main(args: Array[String]): Unit = {
    val allNumbers = List(1, 2, 3, 4, 5, 6)
    val evenNumbers = allNumbers.filter(x => x % 2 == 0)
    println(s"All: $allNumbers")
    println(s"Even: $evenNumbers")
  }
}

Defina su propia HOF

¡No está limitado a las HOF integradas! Puede definir sus propias funciones que acepten otras funciones como parámetros. La sintaxis para un tipo de función es (InputType => ReturnType).

Este ejemplo define una función applyOperation que recibe un Int y otra función, op (que recibe un Int y devuelve un Int).

object Main {
  // A HOF that applies an operation to a number
  def applyOperation(x: Int, op: Int => Int): Int = {
    op(x)
  }

  def main(args: Array[String]): Unit = {
    val result = applyOperation(10, _ * 3) // Pass an anonymous function
    println(s"Result of 10 * 3: $result")

    val anotherResult = applyOperation(7, _ + 5)
    println(s"Result of 7 + 5: $anotherResult")
  }
}

Funciones anónimas y abreviaturas

Al pasar funciones a HOF, suele utilizar funciones anónimas (también llamadas lambdas). Scala ofrece formas concisas de escribirlas.

  • x => x * 2: función anónima completa.
  • _ * 2: abreviatura para una función anónima de un solo parámetro.

Ambas formas son habituales y hacen que el código sea más corto y legible.

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(10, 20, 30)

    // Using full anonymous function syntax
    val dividedByTwo = numbers.map(x => x / 2)
    println(s"Divided by two: $dividedByTwo")

    // Using shorthand `_` syntax
    val plusOne = numbers.map(_ + 1)
    println(s"Plus one: $plusOne")
  }
}

Introducción a la currificación

La currificación es una técnica que transforma una función que recibe varios argumentos en una secuencia de funciones, cada una de las cuales recibe un solo argumento.

Su nombre procede del lógico Haskell Curry. En Scala, las funciones con varias listas de parámetros se currifican automáticamente.

En lugar de f(arg1, arg2), se escribe f(arg1)(arg2).

Ejemplo de currificación: listas de varios parámetros

Veamos la currificación en acción. Observe que add recibe sus argumentos en dos listas de parámetros separadas.

Esto permite aplicar parcialmente la función y crear funciones nuevas fijando algunos argumentos.

object Main {
  // A curried function with two parameter lists
  def add(a: Int)(b: Int): Int = {
    a + b
  }

  def main(args: Array[String]): Unit = {
    // Call the function normally
    println(s"5 + 3 = ${add(5)(3)}")

    // Partially apply the first argument
    val addFive = add(5)_ // `_` tells Scala to treat it as a partially applied function
    println(s"5 + 10 = ${addFive(10)}")
    println(s"5 + 20 = ${addFive(20)}")
  }
}

Ventajas de la currificación

¿Por qué usar la currificación? Ofrece varias ventajas en la programación funcional:

  • Aplicación parcial: cree versiones especializadas de una función fijando algunos argumentos. Esto mejora la reutilización del código.
  • Composición de funciones: las funciones currificadas suelen ser más fáciles de componer con otras funciones.
  • Inferencia de tipos: en ocasiones puede ayudar a la inferencia de tipos de Scala, especialmente al trabajar con tipos genéricos complejos.

Currificación para registradores personalizados

Imagine que quiere crear distintas funciones de registro para diferentes niveles (por ejemplo, INFO y ERROR), pero utilizando la misma lógica principal. ¡La currificación es perfecta para esto!

Puede definir una función general log y aplicarla parcialmente para crear registradores específicos.

object Main {
  def log(level: String)(message: String): Unit = {
    println(s"[$level] $message")
  }

  def main(args: Array[String]): Unit = {
    // Create specialized loggers using partial application
    val infoLogger = log("INFO")_
    val errorLogger = log("ERROR")_

    infoLogger("User logged in successfully.")
    errorLogger("Failed to connect to database!")
  }
}

Comprobación rápida: HOF y currificación

Considere el siguiente fragmento de código Scala:

def calculate(x: Int)(y: Int, op: (Int, Int) => Int): Int = {
  op(x, y)
}

val add = (a: Int, b: Int) => a + b
val multiply = (a: Int, b: Int) => a * b

val result1 = calculate(10)(5, add)
val result2 = calculate(2)(3, multiply)

¿Cuáles son los valores de result1 y result2?

Repaso: HOF y currificación

¡Excelente trabajo! Ha explorado dos conceptos muy importantes de la programación funcional:

  • Funciones de orden superior (HOF): funciones que pueden recibir otras funciones como argumentos o devolverlas como resultados. Permiten crear código flexible y reutilizable, como map y filter.
  • Currificación: técnica para transformar una función con varios argumentos en una secuencia de funciones, cada una de las cuales recibe un solo argumento. Es excelente para la aplicación parcial y la creación de funciones especializadas.

¡Estos conceptos son fundamentales para escribir código Scala expresivo y modular!

Preguntas frecuentes

¿La lección «Funciones de orden superior y currificación» es gratis?

Sí — el texto completo de «Funciones de orden superior y currificación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 3 lecciones en total.

¿Qué aprenderé en «Funciones de orden superior y currificación»?

Explore conceptos funcionales avanzados, como las funciones de orden superior y la currificación, para crear código flexible y reutilizable. Practicas Scala for Backend Engineering & Functional Programming con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Scala for Backend Engineering & Functional Programming?

No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.

¿Cuánto tiempo toma la lección «Funciones de orden superior y currificación»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Scala for Backend Engineering & Functional Programming?

Sí. Cada lección de Scala for Backend Engineering & Functional Programming incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Funciones como valores de primera clase
  2. Funciones de orden superior y currificación
  3. Inmutabilidad y efectos secundarios
← Volver a Scala for Backend Engineering & Functional Programming