Arvoja joille kaikki kolme ovat mahdollisia, kutsutaan "ensimmäisen luokan" ("first-class") arvoiksi. "Toisen luokan" ("second-class") arvoja voidaan välittää parametreina ja sijoittaa muuttujaan. "Kolmannen luokan" ("third-class") arvoille vain sijoitus on luvallinen.
Oppikirjan ulkopuolelta: On myös kiinnostavaa havaita, miten esim. Scala sallii funktioille "ensimmäisen luokan" statuksen lisäksi myös "funktioliteraalit":
def muotoile(muotoilija: String => String, sanat: List[String]) =
for(val sana <- sanat)
print(muotoilija(sana))
def huuda(x: String) = x.toUpperCase
val lista = List("hip ", "hurraa!")
// annetaan parametrina ensin nimetty funktio ja lista:
muotoile(huuda, lista)
println
// tulostus: HIP HURRAA!
// annetaan sitten parametrina funktioliteraali ja lista:
muotoile({x => x.replace('h', 'j')}, lista)
println
// tulostus: jip jurraa!
Esimerkkejä:
def kissa = {println("miau")}
def koira = {println("hau")}
// muuttujaan:
var eläin = kissa
eläin // tulostus miau
eläin = koira
eläin // tulostus hau
// parametrina:
def meto(x:Unit) = {x}
meto(kissa) // tulostus miau
meto(koira) // tulostus hau
eläin = kissa
meto(eläin) // tulostus miau
// paluuarvona:
def kumpi(i:Int):Unit = {if (i%2!=0) kissa else koira}
kumpi(7) // tulostus miau
kumpi(8) // tulostus hau
Takaisin sisältösivulle.