In un articolo precedente ho parlato dei dati con cui possiamo lavorare in Scala. Qui darò uno sguardo d’insieme alla gerarchia dei tipi in Scala.

Tutti i tipi in Scala fanno parte di questa gerarchia, e le nostre classi non saranno da meno: faranno automaticamente parte di essa (così come le nostre classi Java estendono automaticamente Object
).
Any
è il supertipo di tutti i tipi. Qui sono definiti i metodi equals
, hashCode
e toString
.
Dopo Any
troviamo due sottoclassi: AnyVal
e AnyRef
. Da AnyVal
discendono i cosiddetti value types: Double
, Float
, Long
, Int
, Short
, Byte
, Char
, Boolean
e Unit
. Unit
è un tipo particolare: è un value type che non porta con sé nessuna informazione (una sorta di void
).
Il fratello di AnyVal
è AnyRef
(corrisponde a java.lang.Object
), e da esso discendono tutti i reference type e le nostre classi. I reference type sono i non-value type, e qui troviamo tra gli altri le collezioni, le stringhe e Option
. Come il nome fa intuire Option
è un tipo di dato opzionale, e i suoi possibili valori sono istanze di scala.Some
oppure None
:
Option
è un po’ il @Nullable
di Scala. Per una sua panoramica completa potete far riferimento alla documentazione della Scala Standard Library.
Completano la gerarchia Nothing
e Null
. Nothing
è il sottotipo di tutti i tipi, detto anche bottom type. Non c’è nessun value type che abbia come tipo Nothing
. Un suo uso comune è quello di segnalare la non terminazione di un’applicazione (ad esempio una eccezione, un’uscita forzata, o un ciclo infinito). Possiamo definirlo come il tipo di un’espressione che non ha un valore, o un metodo che non termina normalmente. Null
infine è un sottotipo di tutti i reference type (cioè è un sottotipo di tutti i sottotipi di AnyRef
). Ha un singolo valore, identificato dal literal null
. Null
viene fornito soprattutto per questioni di interoperabilità con altri linguaggi basati su JVM, e non dovrebbe mai essere usato in un codice Scala.