Uvod

Scala je prije svega potpuno objektno orijentisan jezik.
To znači da su sve vrijednosti u programu objekti, čak i brojevi i karakteri!
Ovo nije slučaj u Javi, gdje imamo 7 "primitivnih tipova" kao što su int, char, boolean...
U Scali su oni predstavljeni klasama Int, Char, Boolean...
U C# je sličan slučaj kao i u Scali, gdje je int samo alijas za Int32, ali je i dalje klasa.
Ovaj koncept se naziva i "unified types".

Da pogledamo deklaraciju konstante:

val x: Int = 5

Tip se piše nakon naziva varijable, kao u Pascalu.
U većini slučajeva kompajler nam može pomoći s "zaključivanjem tipa" (type inference).
Kompajler će skontat za nas da je to broj! Tako da je prethodni primjer ekvivalentan sljedećem:

val x = 5

Primijetite i to da tačkazarez nije potrebna! Napokon!!!
Izgleda da su pisci kompajlera vrlo lijeni ljudi... :D S razlogom, naravno.

Ključna riječ val (skraćeno od value) označava konstantu, isto kao final u Javi:

final int x = 5;

Naravno, sljedeći kod se neće iskompajlirati.
Dobićemo grešku "reassignment to val".

val x = 5
x = 6

Da vidimo sada dobru staru varijablu, koja se deklariše s var, logično:

var y = 5
y = 6
y += 3

Varijabla y na kraju ima vrijednost 9.


U Scali imamo još jednu vrstu varijable, tzv. "lijena konstanta" (lazy value):

lazy val z = 5

Vrijednost lazy val će se izračunati samo jednom, i to tek kada se pozove u programu!
Npr. ako z poziva neku funkciju koja sadrži println, ispisaće se na ekran tek kada pozovemo z (tj. evaluiraće se funkcija).
Ovaj koncept je poznat iz FP, vrlo je koristan za keširanje vrijednosti.