Scala - klasický for cyklus
3. 1. 2011 (před 10 lety) — k47 (CC by)

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.