2012年8月4日土曜日

[Scala] Continue

前回、Scala での Breaks クラスを使った break の仕方を調べてみた。
break と同様に Scala には continue 文もないのだが、Breaks を使うとほぼ同じような書き方で continue 相当のことを実現できる。

まずは、普通に break。
  def breakSample10 {
    import scala.util.control.Breaks;
    val mybreaks = new Breaks;
    import mybreaks.{ break, breakable };

    breakable {
      for (i: Int <- 1 to 5) {
        if (i == 3) break; 
        print(i);
      }
    }
  }
--------------------------------
12

break 文は breakable で渡されているブロック式を脱出する。
なので conitnue を実現するためには continue で脱出する部分を breakable に渡してやればよい。
  def continueSample {
    import scala.util.control.Breaks;
    val mybreaks = new Breaks;
    import mybreaks.{ break, breakable };

    for (i: Int <- 1 to 5) {
      breakable {
        if (i == 3) break; 
        print(i);
      }
    }
  }
---------------------------------
1245

先ほどの break のサンプルから breakable を一段内側に入れることで conitnue 相当の動作になる。
ただ、ソースコード上はどちらも break なのでよく見ないとどちらの動作を意図しているのかが分かりにくいのが難点。

もちろん、break の時と同様にしてcontinue による多重ブロックの脱出もできる。

次回は、Breaks のもうひとつの使い方である tryBreakable について調べてみる。

0 件のコメント:

コメントを投稿