Oppimateriaalin copyright © 2009 Arto Wikla. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.
(Muutettu viimeksi 16.3.2009)

"Ilosanoma litteiden kielten uhreille"

C-kieli ja sen perilliset (C++, Java, ...) hylkäsivät aikanaan jo Algol 60 -kielen esittelemän "syvärakenteen": aliohjelma voi sisältää aliohjelmia, jotka voivat sisältää aliohjelmia, jne. Aliohjelma näkee ympäröivän aliohjelman tunnukset, ellei se itse anna tunnuksille uusia merkityksiä. Toisaalta ulkopuolelta ei näy minkään aliohjelman sisään.

C:ssä (ja Javassa yms.) kaikki "funktiot" sijaitsevat samalla tasolla; kielen aliohjelmarakenne on litteä.

Scalalla voidaan ohjelmoida seuraavaan tyyliin:

def swappauttelua(a:Int, b:Int) = {
  var x = a
  var y = b
  def swap() {   // tyhjät sulkeet eivät välttämättömät
    val apu = x
    x = y
    y = apu
  }
  println(x + " " + y)
  swap()                // tyhjät sulkeet eivät välttämättömät
  println(x + " " + y)
}

swappauttelua(1,2)

Vastaava sisäkkäisyys on mahdollista myös lohkoissa (vrt. Javaan, joka sallii lohkot, mutta vaatii silti metodin sisällä muuttujanimien yksikäsitteisyyden):
var i=1; var j=2; var k=3;
println(i + " " + j + " " + k)

  {var i=10; var j=20;      // uudelleenmääritellään i ja j
   println(i + " " + j + " " + k)

       {var i=100               // uudelleenmääritellään i
        println(i + " " + j + " " + k)
       }

   println(i + " " + j + " " + k)
  }

println(i + " " + j + " " + k)
Tulostus:
1 2 3
10 20 3
100 20 3
10 20 3
1 2 3



Takaisin sisältösivulle.