Sve vrijednosti u Scali su objekti, uključujući brojeve i funkcije. Dijagram ispod prikazuje hijerarhiju Scala klasa.
Hijerarhija tipova u Scali
Any
je nadtip svih tipova, zove se još i vrh-tip.
Definiše određene univerzalne metode kao što su equals
, hashCode
i toString
.
Any
ima dvije direktne podklase, AnyVal
i AnyRef
.
AnyVal
predstavlja vrijednosne tipove. Postoji devet predefinisanih vrijednosnih tipova i oni ne mogu biti null
:
Double
, Float
, Long
, Int
, Short
, Byte
, Char
, Unit
i Boolean
.
Unit
je vrijednosni tip koji ne nosi značajnu informaciju. Postoji tačno jedna instanca tipa Unit
koja se piše ()
.
Sve funkcije moraju vratiti nešto tako da je Unit
ponekad koristan povratni tip.
AnyRef
predstavlja referencne tipove. Svi nevrijednosni tipovi definišu se kao referencni.
Svaki korisnički definisan tip je podtip AnyRef
.
Ako se Scala koristi u kontekstu JRE, onda AnyRef
odgovara klasi java.lang.Object
.
Slijedi primjer koji demonstrira da su stringovi, integeri, karakteri, booleani i funkcije svi objekti kao bilo koji drugi:
val list: List[Any] = List(
"a string",
732, // an integer
'c', // a character
true, // a boolean value
() => "an anonymous function returning a string"
)
list.foreach(element => println(element))
Definisana je varijabla list
tipa List[Any]
. Lista je inicijalizovana elementima različitih tipova, ali su svi instanca Any
, tako da se mogu dodati u listu.
Ovo je izlaz programa:
a string
732
c
true
<function>
Kastovanje tipova
Vrijednosni tipovi mogu biti kastovani na sljedeći način:
Npr:
val x: Long = 987654321
val y: Float = x.toFloat // 9.8765434E8 (određena doza preciznosti se gubi ovdje)
val face: Char = '☺'
val number: Int = face // 9786
Kastovanje je jednosmjerno. Ovo se ne kompajlira:
val x: Long = 987654321
val y: Float = x.toFloat // 9.8765434E8
val z: Long = y // Does not conform
Također možete kastovati i referencni tip u podtip. Ovo će biti pokriveno kasnije.
Nothing i Null
Nothing
je podtip svih tipova, također se zove i donji tip (en. bottom type). Ne postoji vrijednost koja ima tip Nothing
.
Česta upotreba ovog tipa je signalizacija neterminacije kao što je bacanje izuzetka, izlaz iz programa, ili beskonačna petlja (tj. tip izraza koji se ne izračunava u vrijednost, ili metoda koja se ne završava normalno).
Null
je podtip svih referencnih tipova (tj. bilo kog podtipa AnyRef
).
Ima jednu vrijednost koja se piše literalom null
.
Null
se uglavnom koristi radi interoperabilnosti s ostalim JVM jezicima i skoro nikad se ne koristi u Scala kodu.
Alternative za null
obradićemo kasnije.
Contributors to this page:
Contents
- Uvod
- Osnove
- Sjedinjeni tipovi
- Klase
- Podrazumijevane vrijednosti parametara
- Imenovani parametri
- Trejtovi
- Tuples
- Kompozicija mixin klasa
- Funkcije višeg reda
- Ugniježdene metode
- Curry-jevanje
- Case klase
- Podudaranje uzoraka (pattern matching)
- Singlton objekti
- Regularni izrazi
- Ekstraktor objekti
- For komprehensije
- Generičke klase
- Varijanse
- Gornja granica tipa
- Donja granica tipa
- Unutarnje klase
- Apstraktni tipovi
- Složeni tipovi
- Self-tipovi
- Implicitni parametri
- Implicitne konverzije
- Polimorfne metode
- Lokalno zaključivanje tipova (type inference)
- Operatori
- By-name parametri
- Anotacije
- Packages and Imports
- Package Objects