Avatar ·

Qual é a diferença entre um bloco init e um construtor em Kotlin?

Olá! Acabei de começar a aprender Kotlin depois de Java e me deparei com uma confusão. Em Java, temos construtores onde inicializamos os campos. Em Kotlin, vejo que podemos usar tanto construtores (primário e secundários) quanto blocos `init` especiais. Mas não entendo completamente por que os blocos `init` são necessários, se tudo pode ser feito no construtor? Por exemplo, tenho este código: ```kotlin class Person(name: String) { val name: String init { this.name = name.uppercase() } } ``` Por que não simplesmente escrever `init` no corpo do construtor, como em Java? Ou este outro exemplo: ```kotlin class Rectangle(val width: Int, val height: Int) { val area: Int init { area = width * height } } ``` Isso pode ser feito diretamente no construtor primário? Qual é a diferença fundamental entre `init` e o construtor? Quando usar cada um? E o que acontece se a classe tiver vários blocos `init` e construtores secundários — em que ordem eles são executados?