¿Qué significa el operador * (asterisco) antes de una variable en Kotlin? Spread Operator
¡Hola! Estoy aprendiendo Kotlin y me encontré con una sintaxis extraña que no puedo entender. Encontré este código:
```kotlin
val numbers = listOf(1, 2, 3)
val moreNumbers = listOf(0, *numbers.toTypedArray(), 4, 5)
println(moreNumbers) // [0, 1, 2, 3, 4, 5]
```
¿Qué significa el asterisco `*` antes de `numbers.toTypedArray()`? Sé que en Java hay un operador similar para desempaquetar arrays, pero en Kotlin estoy acostumbrado a trabajar con listas y arrays de otra manera.
Intenté escribir un código similar sin el asterisco:
```kotlin
val wrong = listOf(0, numbers.toTypedArray(), 4, 5)
println(wrong) // [0, [Ljava.lang.Integer;@..., 4, 5]
```
Obtuve algo sin sentido: en la lista entró un objeto array, no sus elementos. ¿Cómo usar correctamente este operador? ¿Hay alternativas? ¿Y por qué en Kotlin, que se considera más moderno, se necesita una construcción tan "antigua"?
Agradecería una explicación con ejemplos, especialmente para casos con funciones que aceptan vararg.