Las funciones anónimas, también conocidas como funciones lambda, son funciones que no tienen un nombre explícito. En Scala, las funciones anónimas son una característica poderosa que permite escribir código más conciso y expresivo. En esta sección, aprenderemos cómo definir y utilizar funciones anónimas en Scala.
Conceptos Clave
- Definición de Funciones Anónimas: Cómo declarar y utilizar funciones anónimas.
- Sintaxis de Funciones Anónimas: La estructura y sintaxis de las funciones anónimas en Scala.
- Uso de Funciones Anónimas: Ejemplos prácticos de cómo y cuándo usar funciones anónimas.
- Funciones Anónimas y Funciones de Orden Superior: Cómo las funciones anónimas se integran con las funciones de orden superior.
Definición de Funciones Anónimas
Una función anónima en Scala se define utilizando la sintaxis =>
. La parte izquierda del =>
contiene los parámetros de la función, y la parte derecha contiene el cuerpo de la función.
Ejemplo Básico
En este ejemplo:
(a: Int, b: Int)
son los parámetros de la función.=>
es el operador que separa los parámetros del cuerpo de la función.a + b
es el cuerpo de la función.
Sintaxis de Funciones Anónimas
La sintaxis de las funciones anónimas puede variar dependiendo del contexto y de la cantidad de parámetros. Aquí hay algunas variaciones comunes:
Función Anónima sin Parámetros
Función Anónima con un Solo Parámetro
Función Anónima con Múltiples Parámetros
Función Anónima con Tipos Inferidos
Scala puede inferir los tipos de los parámetros en muchos casos, lo que permite una sintaxis más concisa:
val suma = (a: Int, b: Int) => a + b val sumaInferida = (a, b) => a + b // Tipos inferidos println(sumaInferida(3, 4)) // Salida: 7
Uso de Funciones Anónimas
Las funciones anónimas son especialmente útiles cuando se utilizan con funciones de orden superior, como map
, filter
y reduce
.
Ejemplo con map
val numeros = List(1, 2, 3, 4, 5) val cuadrados = numeros.map(x => x * x) println(cuadrados) // Salida: List(1, 4, 9, 16, 25)
Ejemplo con filter
val numeros = List(1, 2, 3, 4, 5) val pares = numeros.filter(x => x % 2 == 0) println(pares) // Salida: List(2, 4)
Ejemplo con reduce
val numeros = List(1, 2, 3, 4, 5) val sumaTotal = numeros.reduce((a, b) => a + b) println(sumaTotal) // Salida: 15
Ejercicios Prácticos
Ejercicio 1: Filtrar Números Impares
Escribe una función anónima que filtre los números impares de una lista.
val numeros = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val impares = numeros.filter(x => x % 2 != 0) println(impares) // Salida esperada: List(1, 3, 5, 7, 9)
Ejercicio 2: Calcular Factoriales
Escribe una función anónima que calcule el factorial de un número dado.
Ejercicio 3: Convertir a Mayúsculas
Escribe una función anónima que convierta una lista de cadenas a mayúsculas.
val palabras = List("scala", "es", "genial") val mayusculas = palabras.map(_.toUpperCase) println(mayusculas) // Salida esperada: List("SCALA", "ES", "GENIAL")
Soluciones
Solución al Ejercicio 1
val numeros = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val impares = numeros.filter(x => x % 2 != 0) println(impares) // Salida: List(1, 3, 5, 7, 9)
Solución al Ejercicio 2
Solución al Ejercicio 3
val palabras = List("scala", "es", "genial") val mayusculas = palabras.map(_.toUpperCase) println(mayusculas) // Salida: List("SCALA", "ES", "GENIAL")
Conclusión
En esta sección, hemos aprendido sobre las funciones anónimas en Scala, su sintaxis y cómo utilizarlas en diferentes contextos. Las funciones anónimas son una herramienta poderosa que permite escribir código más conciso y expresivo, especialmente cuando se combinan con funciones de orden superior. En la próxima sección, exploraremos más sobre las colecciones y estructuras de datos en Scala.
Curso de Programación en Scala
Módulo 1: Introducción a Scala
- Introducción a Scala
- Configuración del Entorno de Desarrollo
- Conceptos Básicos de Scala: Sintaxis y Estructura
- Variables y Tipos de Datos
- Operaciones Básicas y Expresiones
Módulo 2: Estructuras de Control y Funciones
- Sentencias Condicionales
- Bucles e Iteraciones
- Funciones y Métodos
- Funciones de Orden Superior
- Funciones Anónimas
Módulo 3: Colecciones y Estructuras de Datos
- Introducción a las Colecciones
- Listas y Arreglos
- Conjuntos y Mapas
- Tuplas y Opciones
- Coincidencia de Patrones
Módulo 4: Programación Orientada a Objetos en Scala
- Clases y Objetos
- Herencia y Rasgos
- Clases Abstractas y Clases Caso
- Objetos Compañeros
- Objetos Singleton
Módulo 5: Programación Funcional en Scala
- Inmutabilidad y Funciones Puras
- Estructuras de Datos Funcionales
- Mónadas y Funtores
- Comprensiones For
- Manejo de Errores en Programación Funcional
Módulo 6: Conceptos Avanzados de Scala
- Conversiones y Parámetros Implícitos
- Clases de Tipo y Polimorfismo
- Macros y Reflexión
- Concurrencia en Scala
- Introducción a Akka