// --- Muodollisesta parametrista yksityinen vakiokenttä: --- // (tai oikeastaan ei edes varsinainen kenttä, vakiopa vain...) class L1 (para:Int) { def this() = this(42) // parametriton konstruktori oletusarvoin override def toString = ""+ para } val m1 = new L1(69) val m2 = new L1() println(m1) println(m2) // --- Muodollisesta parametrista julkinen kenttä: tietuerakenne: --- class L2 (var para:Int) { def this() = this(42) // parametriton konstruktori oletusarvoin override def toString = ""+ para } val m21 = new L2(69) val m22 = new L2() println(m21.para) println(m22) m22.para = 666 println(m22) // --- Muodollisesta parametrista julkinen vakiokenttä: read-only-tietuerakenne: --- class L2 (val para:Int) { def this() = this(42) // parametriton konstruktori oletusarvoin override def toString = ""+ para } val m21 = new L2(69) val m22 = new L2() println(m21.para) println(m22) // m22.para = 666 olisi virhe // --- Muodollisesta parametrista yksityinen kenttä; aksessorit Java-tyyliin: --- class L3 (private var para:Int) { def this() = this(42) // parametriton konstruktori oletusarvoin def setPara(i:Int) {para = i} // setteri def getPara = para override def toString = ""+ para } val m31 = new L3(69) val m32 = new L3() println(m31) println(m32) m32.setPara(666) println(m32) m32.setPara(321) println(m32.getPara)Huom: Molemmat muodot
def setPara(i:Int) {para = i} def setPara(i:Int) = {para = i}ovat sallittuja. Ensimmäinen tarkoittaa, että funktio on tyypiltään Unit, jälkimmäinen että tyyppi on lausekelistan viimeisen lausekkeen tyyppi - tässä siis Int. Scala idiomin mukaista on kirjoittaa sivuvaikutukselliset arvoa palauttamattomat "setterit" ilman yhtäsuuruusmerkkiä, muut merkin kanssa. Jos lausekelista on yksi lauseke ja "="- merkkiä käytetään, aaltosulkeitakaan ei ole pakko kirjoittaa: def setPara(i:Int) = para = i. Tosin tämä ei ole kaunista tässä; toisin kuin "aidoissa funktioissa": def getPara = para
// --- Erikseen julkinen ja yksityinen muutettava kenttä class L4 (para:Int) { var julkiKent = para private var yksitKent = para def this() = this(42) // parametriton konstruktori oletusarvoin def setPara(i:Int) {yksitKent = i} // setteri override def toString = julkiKent + " " + yksitKent } val m41 = new L4(69) val m42 = new L4(); println(m41) println(m42) m42.julkiKent = 666 println(m42) m42.setPara(666) println(m42) // --- Jne, jne, jne, jne, ...