KotlinIntermedio7 oct 2025
El misterio del lambda que se ejecuta dos veces
snippet.kotlin
fun main() {
val list = mutableListOf<() -> Unit>()
list.add { println("Hola") }
list.forEach { it() }
println("Tamaño final: ${list.size}")
}¿Qué crees que imprime?
✅ Salida Esperada
Hola
Tamaño final: 1⚠️ Salida Real
Hola
Hola
Tamaño final: 2¿Por qué pasa esto?
**¡Kotlin nos juega una mala pasada!** 😱 Aquí tenemos un **lambda capturador** que se comporta como un boomerang:
- El lambda `{ println("Hola") }` captura la referencia a la lista mutable `list`
- Al ejecutarse el lambda dentro del `forEach`, **modifica la lista** añadiendo otro lambda
- Esto causa que el iterador interno **vuelva a procesar** el nuevo elemento añadido
- Resultado: **¡Un bucle inesperado dentro del forEach!** 🔄
**Moraleja**: Nunca modifiques colecciones mientras las iteras, ¡o te encontrarás con sorpresas recursivas! 🤪
Conceptos relacionados
lambda-capturemutation-during-iterationconcurrent-modification