Avatar ·

¿Cuál es la diferencia entre fold y reduce en Kotlin y cuándo usar cada uno?

¡Hola! Recientemente empecé a estudiar Kotlin y me encontré con las funciones fold y reduce al trabajar con colecciones. Entiendo que ambas se usan para la agregación de elementos, pero no logro captar la diferencia. Aquí hay un ejemplo que me confundió. Supongamos que tengo una lista de números: ```kotlin val numbers = listOf(1, 2, 3, 4, 5) ``` Puedo calcular la suma con reduce: ```kotlin val sumReduce = numbers.reduce { acc, i -> acc + i } println(sumReduce) // 15 ``` Y con fold: ```kotlin val sumFold = numbers.fold(0) { acc, i -> acc + i } println(sumFold) // 15 ``` El resultado es el mismo. Pero noté que en fold paso un valor inicial (0), mientras que en reduce no. ¿Qué pasa si la lista está vacía? Lo probé: ```kotlin val emptyList = listOf() // val result = emptyList.reduce { acc, i -> acc + i } // ¡Error! val result2 = emptyList.fold(0) { acc, i -> acc + i } println(result2) // 0 ``` Resulta que reduce lanza un error con una lista vacía, mientras que fold funciona. Pero esto no es