Función anónima
Una función sin nombre, normalmente corta, que se escribe directamente donde se usa, por ejemplo para filtrar una lista.
Muchas funciones de los lenguajes reciben otra función como dato: «filtra esta lista con esta condición». En lugar de declarar aparte una función con nombre, se escribe en el momento una anónima o lambda.
Su forma cambia según el lenguaje: p => p.precio > 10 en JavaScript, Java o C#, lambda p: p.precio > 10 en Python o { it.precio > 10 } en Kotlin. Pueden usar variables del entorno donde se crean (en ese caso se llaman clausuras o closures).
Un ejemplo
productos.filter(p => p.precio < 5) usa una lambda para quedarse con los productos de menos de 5 €.
Por qué importa
Las funciones anónimas resultan útiles cuando necesitas una función pequeña, de un solo uso, y darle nombre sería ruido. Se ven mucho al pasar comportamiento como argumento: ordenar con un criterio propio, filtrar elementos o reaccionar a un clic con addEventListener.
En JavaScript moderno se escriben normalmente como funciones flecha, x => x * 2, y son la base de métodos como map, filter y reduce. Entenderlas es imprescindible para leer código real de bibliotecas y frameworks.
Confusiones frecuentes
«Anónima» no significa que no pueda guardarse: puedes asignarla a una variable y llamarla después. La diferencia es que la propia función no lleva nombre. Tampoco hay que abusar de ellas: una función larga y compleja escrita en línea resulta difícil de leer y de depurar, porque en los mensajes de error aparece sin un nombre que ayude a localizarla. En Python, lambda solo admite una expresión, no bloques de varias líneas.
Preguntas frecuentes
¿En qué se diferencia una función flecha de una normal?
Además de la sintaxis más corta, una función flecha no define su propio this, sino que usa el del contexto donde se creó. Es una distinción importante dentro de clases y manejadores de eventos.
¿Cuándo prefiero una función con nombre?
Cuando la lógica es larga, se reutiliza o necesitas que aparezca con nombre en los mensajes de error.
Fuentes consultadas
- Funciones flecha (MDN Web Docs)