iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 11
0
Software Development

認識scala系列 第 11

Scala day 11 (Loop & break & continue)

  • 分享至 

  • xImage
  •  

while & do...while

while 和 do...while 用法和 java 差不多,條件都是放 boolean 值即可 :

scala> var i = 0
i: Int = 0

scala> while(i < 5) {
     |  println(i)
     |  i = i + 1
     | }
0
1
2
3
4

scala> do {
     |  println(i)
     |  i = i + 1
     | } while(i < 5)
0
1
2
3
4

scala no break & no continue

scala 沒有提供 break 及 continue 這兩個關鍵字使用,所以需使用其他寫法來替代.
需要 import scala.util.control.Breaks 套件的 breakable 及 break :

scala> import scala.util.control.Breaks.breakable
import scala.util.control.Breaks.breakable

scala> import scala.util.control.Breaks.break
import scala.util.control.Breaks.break

使用 breakable 區塊替代 break,下面例子 i == 3 就會 break :

scala> var i = 0
i: Int = 0

scala> breakable {
     |  while(i < 5) {
     |   if(i == 3) {
     |    break
     |   }
     |   println(i)
     |   i = i + 1
     |  }
     | }
0
1
2

使用 breakable 區塊替代 continue,下面例子 i == 3 就會 continue 不 println :

scala> while(i < 5) {
     |  breakable {
     |   if(i == 3) {
     |    break
     |   }
     |   println(i)
     |  }
     |  i = i + 1
     | }
0
1
2
4

所以利用 breakable 區塊的位置可以達到 break 及 continue 的效果.
下面例子是使用 scala.util.control.Breaks 物件,搭配混合使用,偶數的話 continue , i == 7 時就 break :

scala> import scala.util.control.Breaks
import scala.util.control.Breaks

scala> val breakobj = new Breaks
breakobj: scala.util.control.Breaks = scala.util.control.Breaks@5284ae6e

scala> val continuobj = new Breaks
continuobj: scala.util.control.Breaks = scala.util.control.Breaks@1bcf8661

scala> breakobj.breakable {
     |  while (i < 10) {
     |   continuobj.breakable {
     |    if (i % 2 == 0) {
     |     continuobj.break
     |    } else if(i == 7) {
     |     breakobj.break
     |    }
     |    println(i)
     |   }
     |   i = i + 1
     |  }
     | }
1
3
5

總結


  • scala 沒有提供 break 和 continue,但還是可以運用 breakable 來實作出來.

上一篇
Scala day 10 (Loop)
下一篇
Scala day 12 (Pattern Matching)
系列文
認識scala30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言