Helsingin yliopisto / tietojenkäsittelytieteen laitos / Ohjelmointitekniikka (Scala) / © Arto Wikla 2010

Ohjelmointitekniikka (Scala): kurssikoe 3.5.2010

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, opiskelijanumerosi ja myös allekirjoituksesi. Kokeessa mikään lähdemateriaali ei ole sallittu. Kukin tehtävä on kymmenen pisteen arvoinen.
  1. Mitä seuraava tulostaa:
    val lista = for (i <- 1 to 3; j <- i to 6) yield(j)
    for (luku <- lista; if luku%2 != 0)
      println(luku)
    
    Miksi? Mistä on kysymys? Miten kaikki käy? Pelkästä tulostuksesta ei saa pisteitä!

  2. Mitä seuraava tulostaa:
    val l = List(3, 1, 4, 2, 5)
    var a = 0; var b = 1
    l.foreach(x => {a+=x;b*=x})
    println(a+" "+b)
    
    Miksi? Mistä on kysymys? Miten kaikki käy? Pelkästä tulostuksesta ei saa pisteitä!

  3. Tee seuraavalle funktiolle Curry-muunnos funktiona g:
    def f(n: String, i: Int)  {println(n + ": " + i)}
    
    Selitä, mistä on kysymys ja anna myös esimerkit f:n ja g:n kutsusta.

  4. Selitä mistä on kysymys ohuissa (thin) ja rikkaissa (rich) rajapinnoissa. Millä tavoin Scala-kieli helpottaa rikkaiden rajapintojen ohjelmointia? Anna esimerkkejä ohjelmahahmotelmina ja Scalan valmiista kalustosta.

  5. Mitä seuraava tulostaa:
    abstract class A {def a: String}
    class TA extends A {override def a = "TA"}
    trait B extends A {abstract override def a = "B" + super.a + "B"}
    trait C extends A {abstract override def a = "C" + super.a}
    trait D extends A {abstract override def a = super.a + "D"}
    
    val s = new TA with B with C with D
    println(s.a)
    
    val u = new TA with C with B with D
    println(u.a)
    
    val w = new TA with D with B with C
    println(w.a)
    
    val x = new TA with D with C with B
    println(x.a)
    
    Miksi? Mistä on kysymys? Miten kaikki käy? Pelkästä tulostuksesta ei saa pisteitä!