Atributos de clase debe ser iniciado

Como por estos lares se habla muy bien de Scala, ps he comenzado a aprender el lenguaje, me surge una duda, estoy creando una clase llamada Persona, esta clase tiene una serie de atributos, pero si yo no inicio los atributos, ahora lo hago a null, el me dice que debo realizar una inicializacion previa para poder declararla, sino me sale indefinida.
Ejemplo:
 
Debí iniciarla de la siguiente manera para que no genere error en el momento de la compilación
 
Porqué sucede esto?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Razones...

Scala puede ser engañoso. Tal vez piensas que lo que escribiste es equivalente a tener una clase Persona en Java con esas propiedades, pero no es completamente cierto... en Scala, cuando declaras una clase, puedes poner código dentro de la declaración, y ese código se ejecuta en el constructor. Aparte de eso, las declaraciones de propiedades que hagas, por default serán públicas (tipo Groovy; por ejemplo, tienes una variable tipo Int llamada identificacion, la cual no será directamente accesible desde fuera, pero tiene un getter y un setter, públicos).

Por eso las variables las debes inicializar, porque es como si las declararas en el constructor; aunque no tengas código que las utilice después, podrías tenerlo:

 

Eso es código Scala, casi válido, porque no va a compilar, te va a dar el mismo error de la variable no inicializada. Luego le pones un valor inicial a tu variable y listo, ya compila. Cuando creas una nueva persona, te imprime el valor inicial que le hayas puesto, porque ese código que está dentro de la clase, así nomás sin ningún método, se convierte en el código del constructor por default, que en este caso no tiene argumentos.

Si quieres ponerle un constructor con argumentos a tu clase, le declaras los argumentos en la declaración de la clase:

 

En este caso, tienes una clase Persona que tiene un constructor por default que recibe un argumento llamado  . Cuando creas una nueva instancia, se imprime el ID que le hayas pasado. Este ID no es accesible desde fuera; ahora sí queda como una variable de instancia privada, inmutable por cierto. Si quieres que sea además de todo accesible desde fuera, puedes ponerle   para que sea público pero inmutable, o   si quieres que sea pública y mutable:

 

En Scala lo recomendable es que a tu clase le pongas un constructor que reciba todos los valores que requiera para poder funcionar, y que todo lo que pueda ser inmutable lo manejes como inmutable.