k47.cz
foto Praha výběr povídky kulturatwitter FB


3. 1. 2011

Scala - klasický for cyklus 📷

       

Scala, na rozdíl od jazyků z rodiny C/C++, neobsahuje for cyklus, protože je podle Martina Oderskyho příliš imperativní a Scala jako taková hodně tíhne k funkcionálnímu jazyku.

Nicméně, to nám nebrání si tuto jazykovou konstrukci doplnit. Tady jsou moje tři pokusné implementace.


// negenerická verze
def classicFor0(init: Int, cond: Int => Boolean, incr: Int => Int)(op: Int => Unit) {
  var i = init
  while (cond(i)) {
    op(i)
    i = incr(i)
  }
}

// použití
classicFor0(0, _ < 10, _ + 1) { i =>
  println(i)
}
// generická verze 1
def classicFor1[@specialized T](init: T, cond: T => Boolean, incr: T => T)(op: T => Unit) {
  var i = init
  while (cond(i)) {
    op(i)
    i = incr(i)
  }
}

// použití
// typová anotace [Int] je tady potřeba, protože kompilátor nedokáže odvodit typ fukncí cond a incr
classicFor1[Int](0, _ < 10, _ + 1) { i =>
  println(i)
}
// generická verze 2
def classicFor2[@specialized T](init: T)(cond: T => Boolean, incr: T => T)(op: T => Unit) {
  var i = init
  while (cond(i)) {
    op(i)
    i = incr(i)
  }
}

// použití
// žádná typová anotace netřeba za cenu jiného zápisu
classicFor2(0)(_ < 10, _ + 1) { i =>
  println(i)
}

Výsledek bohužel není tak flexibilní jako for cyklus v jazycích, které ho mají vestavěný v jazyce.


vstoupit do diskuze    sdílet na facebooku, twitteru, google+

příbuzné články:
Scala - dynamický jazyk 📷
Scala - Zřetězené porovnávání 📷
Scala - metody ála Smalltalk 📷
Go třídy ve Scale 📷
Scala - Booleovská kompozice funkcí 📷
Scala - líné parametry, líné závislosti a líné proxy 📷

sem odkazují:
Scala - scalable language

píše k47 & NEVERYOUNG, kontakt: ascii@k47.cz