Abbrechen! Sofort abbrechen!


Eine gute Frage aus dem Scala-Forum: „Scala hat kein continue oder break für for-Schleifen. Ich kann ja das Fehlen von continue noch einigermaßen verstehen – ist ja sowieso nur Faulheit – aber kein break?“

Zuerst sei angemerkt, dass Scala ziemlich bald – in der kommenden Version 2.8 – ein break haben wird. Wer es sich schonmal angucken will: Es ist in scala.util.control.Breaks definiert. Verwendet wird es wie folgt:

val breakPoint = 7
breakable {
for(i <- 1 to 10) { println(i) if (i == breakPoint) break } } [/sourcecode] Welche Alternativen hat man nun in Scala 2.7? Eine einfache Lösung ist, das for in eine eigene kleine lokale Methode zu packen, und return aufzurufen: [sourcecode language='java'] val breakPoint = 7 def loop { for(i <- 1 to 10) { println(i) if (i == breakPoint) return } } loop [/sourcecode] Das ist nur unwesentlich länger als der neue Ansatz. Eine andere - häßlichere - Alternative ist das Auslösen einer Ausnahme (so ist intern das neue breakable implementiert). Aber oft braucht man solche Konstrukte gar nicht. Viel "funktionaler" ist es, in solchen Fällen ganz auf for zu verzichten und stattdessen Methoden wie takeWhile oder find zu benutzen: [sourcecode language='java'] val breakPoint = 7 (1 to 10).takeWhile(i <= breakPoint).foreach(println) [/sourcecode] Viel cooler, oder nicht? Wie dem auch sei, ich breche an dieser Stelle ab...

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s