Avatar ·

¿Cuál es la diferencia entre un bloque init y un constructor en Kotlin?

¡Hola! Acabo de empezar a aprender Kotlin después de Java y me encontré con confusión. En Java tenemos constructores donde inicializamos campos. En Kotlin veo que se pueden usar tanto constructores (primario y secundarios) como bloques especiales `init`. Pero no termino de entender para qué sirven los bloques `init` si todo se puede hacer en el constructor. Por ejemplo, tengo este código: ```kotlin class Person(name: String) { val name: String init { this.name = name.uppercase() } } ``` ¿Por qué no simplemente escribir `init` en el cuerpo del constructor, como en Java? O también este ejemplo: ```kotlin class Rectangle(val width: Int, val height: Int) { val area: Int init { area = width * height } } ``` ¿Se puede hacer esto directamente en el constructor primario? ¿Cuál es la diferencia fundamental entre `init` y el constructor? ¿Cuándo usar cada uno? ¿Y qué pasa si la clase tiene varios bloques `init` y constructores secundarios? ¿En qué orden se ejecutan?