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