Que signifie l'opérateur * (astérisque) avant une variable en Kotlin ? Spread Operator
Bonjour ! J'apprends Kotlin et je suis tombé sur une syntaxe étrange que je ne comprends pas. J'ai rencontré ce code :
```kotlin
val numbers = listOf(1, 2, 3)
val moreNumbers = listOf(0, *numbers.toTypedArray(), 4, 5)
println(moreNumbers) // [0, 1, 2, 3, 4, 5]
```
Que signifie l'astérisque `*` avant `numbers.toTypedArray()` ? Je sais qu'en Java il existe un opérateur similaire pour décompresser les tableaux, mais en Kotlin j'ai l'habitude de travailler avec des listes et des tableaux différemment.
J'ai essayé d'écrire un code similaire sans l'astérisque :
```kotlin
val wrong = listOf(0, numbers.toTypedArray(), 4, 5)
println(wrong) // [0, [Ljava.lang.Integer;@..., 4, 5]
```
Cela a donné un résultat étrange — l'objet tableau a été ajouté à la liste, et non ses éléments. Comment utiliser correctement cet opérateur ? Existe-t-il des alternatives ? Et pourquoi Kotlin, considéré comme plus moderne, a-t-il besoin d'une telle construction "ancienne" ?
Je vous serais reconnaissant pour une explication avec des exemples, en particulier pour les cas avec des fonctions qui acceptent vararg.
No answers yet.
Connectez-vous pour laisser une réponse