23.04.2018
Sakib Hadžiavdić

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... Gdje ste bili do sada??? :/
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 iz FP, i vrlo je koristan za keširanje vrijednosti.