Quelle est la différence entre fold et reduce en Kotlin et quand utiliser quoi ?
Bonjour ! J'ai récemment commencé à apprendre Kotlin et j'ai rencontré les fonctions fold et reduce en travaillant avec des collections. Je comprends que les deux sont utilisées pour l'agrégation d'éléments, mais je n'arrive pas à saisir la différence.
Voici un exemple qui m'a embrouillé. Supposons que j'ai une liste de nombres :
```kotlin
val numbers = listOf(1, 2, 3, 4, 5)
```
Je peux calculer la somme avec reduce :
```kotlin
val sumReduce = numbers.reduce { acc, i -> acc + i }
println(sumReduce) // 15
```
Et avec fold :
```kotlin
val sumFold = numbers.fold(0) { acc, i -> acc + i }
println(sumFold) // 15
```
Le résultat est identique. Mais j'ai remarqué que dans fold je passe une valeur initiale (0), alors que dans reduce non. Que se passe-t-il si la liste est vide ? J'ai essayé :
```kotlin
val emptyList = listOf()
// val result = emptyList.reduce { acc, i -> acc + i } // Erreur !
val result2 = emptyList.fold(0) { acc, i -> acc + i }
println(result2) // 0
```
Il s'avère que reduce plante avec une erreur sur une liste vide, alors que fold fonctionne. Mais ce n'est pas