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

Funciones como valores de primera clase

Aprenda a definir y pasar funciones como argumentos, devolverlas desde otras funciones y almacenarlas en variables.

Funciones como valores de primera clase es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 1 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.

Funciones como valores de primera clase

¡Le damos la bienvenida a Fundamentos de la programación funcional! En Scala, las funciones no son solo comandos, sino valores de primera clase.

Esto significa que puede tratar las funciones igual que cualquier otro tipo de datos, como números o cadenas. ¡Es un concepto fundamental de la programación funcional!

Asignación de funciones a variables

Al igual que puede asignar un número a un val, también puede asignarle una función. Aquí, greet se convierte en una variable que contiene nuestra función.

Intente ejecutar este sencillo ejemplo:

object Main {
  def main(args: Array[String]): Unit = {
    val greet = (name: String) => s"Hello, $name!"
    println(greet("Alice"))
  }
}

Funciones anónimas (lambdas)

La parte (name: String) => s"Hello, $name!" de la escena anterior es una función anónima, también conocida como expresión lambda.

Es una función sin nombre, que a menudo se define directamente en el lugar donde se necesita. Resulta muy útil para tareas rápidas y específicas.

object Main {
  def main(args: Array[String]): Unit = {
    val add = (x: Int, y: Int) => x + y
    println(s"5 + 3 = ${add(5, 3)}")

    val subtract = (a: Int, b: Int) => a - b
    println(s"10 - 4 = ${subtract(10, 4)}")
  }
}

Funciones como argumentos de métodos

Uno de los aspectos más potentes es pasar funciones como argumentos a otras funciones. Estas se denominan funciones de orden superior.

La función applyOperation de abajo recibe dos números y otra función, op. Después, op se utiliza para combinar los números.

object Main {
  def applyOperation(x: Int, y: Int, op: (Int, Int) => Int): Int = {
    op(x, y)
  }

  def main(args: Array[String]): Unit = {
    val add = (a: Int, b: Int) => a + b
    val result = applyOperation(5, 3, add)
    println(s"Result of addition: $result")
  }
}

Comprender los tipos de función

Observe la signatura de tipo op: (Int, Int) => Int de la escena anterior.

  • (Int, Int): significa que la función recibe dos argumentos Int.
  • => Int: significa que la función devuelve un Int.

Toda función tiene un tipo que describe sus entradas y su salida. ¡Esto ayuda a Scala a garantizar la seguridad de tipos!

Pasar funciones de forma concisa

No siempre es necesario definir primero una función con nombre. Puede pasar una función anónima directamente donde se espere un argumento de tipo función.

Esto hace que el código sea más compacto y legible, especialmente en operaciones sencillas.

object Main {
  def applyOperation(x: Int, y: Int, op: (Int, Int) => Int): Int = {
    op(x, y)
  }

  def main(args: Array[String]): Unit = {
    val result1 = applyOperation(10, 2, (a: Int, b: Int) => a * b)
    println(s"Multiplication: $result1")

    // Scala can often infer types, making it even shorter!
    val result2 = applyOperation(20, 4, (a, b) => a / b)
    println(s"Division: $result2")
  }
}

Funciones como valores de retorno

Las funciones también pueden devolver otras funciones. Puede parecer sorprendente, pero resulta increíblemente útil para crear código flexible y configurable.

Aquí, makeMultiplier devuelve una función nueva que multiplica su entrada por un factor específico.

object Main {
  def makeMultiplier(factor: Int): Int => Int = {
    (x: Int) => x * factor
  }

  def main(args: Array[String]): Unit = {
    val multiplyByTwo = makeMultiplier(2)
    val multiplyByFive = makeMultiplier(5)

    println(s"5 * 2 = ${multiplyByTwo(5)}")
    println(s"10 * 5 = ${multiplyByFive(10)}")
  }
}

Comprender las clausuras

Cuando makeMultiplier devuelve una función, esa función devuelta «recuerda» el valor de factor que tenía cuando se creó. Esto se denomina clausura.

Aunque makeMultiplier haya terminado de ejecutarse, la función multiplyByTwo todavía «sabe» que su factor es 2.

Ventajas de las funciones de primera clase

¿Por qué es tan importante tratar las funciones como ciudadanos de primera clase?

  • Flexibilidad: puede cambiar fácilmente los comportamientos pasando distintas funciones.
  • Reutilización: puede crear funciones genéricas que operen sobre cualquier función que proporcione.
  • Concisión: produce código más corto y expresivo, especialmente con funciones anónimas.
  • Estilo funcional: es un pilar de la programación funcional y permite usar patrones potentes.

Compruebe sus conocimientos

Comprobemos su comprensión de las funciones como valores de primera clase.

object Main {
  def execute(x: Int, op: Int => Int): Int = op(x)

  def main(args: Array[String]): Unit = {
    val square = (n: Int) => n * n
    val result = execute(5, square)
    println(result)
  }
}

Funciones como valores: repaso

¡Excelente trabajo! Ha aprendido el concepto fundamental de las funciones como valores de primera clase en Scala.

  • Las funciones se pueden asignar a variables.
  • Se pueden pasar como argumentos a otras funciones.
  • Se pueden devolver como resultados de otras funciones.
  • Esto permite patrones potentes como las funciones de orden superior y las clausuras.

Esta capacidad es clave para escribir código funcional en Scala flexible, reutilizable y expresivo. A continuación, profundizaremos en funciones de orden superior más avanzadas y en la currificación.

Preguntas frecuentes

¿La lección «Funciones como valores de primera clase» es gratis?

Sí — el texto completo de «Funciones como valores de primera clase» 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 como valores de primera clase»?

Aprenda a definir y pasar funciones como argumentos, devolverlas desde otras funciones y almacenarlas en variables. 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 1 de 3.

¿Cuánto tiempo toma la lección «Funciones como valores de primera clase»?

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