Avatar ·

Qual é a diferença entre fold e reduce em Kotlin e quando usar cada um?

Olá! Recentemente comecei a estudar Kotlin e me deparei com as funções fold e reduce ao trabalhar com coleções. Entendo que ambas são usadas para agregação de elementos, mas não consigo captar a diferença. Aqui está um exemplo que me confundiu. Suponha que eu tenha uma lista de números: ```kotlin val numbers = listOf(1, 2, 3, 4, 5) ``` Posso calcular a soma com reduce: ```kotlin val sumReduce = numbers.reduce { acc, i -> acc + i } println(sumReduce) // 15 ``` E com fold: ```kotlin val sumFold = numbers.fold(0) { acc, i -> acc + i } println(sumFold) // 15 ``` O resultado é o mesmo. Mas notei que no fold eu passo um valor inicial (0), enquanto no reduce não. O que acontece se a lista estiver vazia? Tentei: ```kotlin val emptyList = listOf() // val result = emptyList.reduce { acc, i -> acc + i } // Erro! val result2 = emptyList.fold(0) { acc, i -> acc + i } println(result2) // 0 ``` Parece que reduce lança um erro em lista vazia, enquanto fold funciona. Mas isso não é...