Scala - 流程控制

if

用if作流程控制的時候,包括單分支、雙分支、多分支。
好比java是這樣寫的。java

public static void main(String[] args) {
    int num = 10;
    if (num == 10) {
        System.out.println("equal 10");
    }

    if (num > 5) {
        System.out.println("greater than 5");
    } else {
        System.out.println("less than 5");
    }

    if (num < 5) {
        System.out.println("less than 5");
    } else if (num > 20) {
        System.out.println("greater than 20");
    } else {
        System.out.println("greater than 5 and less than 20");
    }
}

Scala也是相似的:數組

def main(args: Array[String]): Unit = {
    val num = 10
    if (num == 10) println("equal 10")

    if (num > 5) println("greater than 5")
    else println("less than 5")

    if (num < 5) println("less than 5")
    else if (num > 20) println("greater than 20")
    else println("greater than 5 and less than 20")
}

可是Scala的表達式是有返回值的,因此他還能夠這樣:less

  • 若是沒有指定變量的類型,那編譯器會自動推斷
  • 若是沒有寫else,那會默認else (),因此x1打印的就是()
  • 若是是塊表達式,那返回值就是最後一行
def main(args: Array[String]): Unit = {
    var num = 10
    var x = if (num > 5) 5
    println(x) // 5
    var x1 = if (num > 20) 5
    println(x1) //()
    var y = if (num > 5) {
      println("num")
      5
    }
    println(y) //5
    var z = if (num > 20) 20 else 5
    println(z) //5
}

for

Scala中for的語法爲:for (i <- 表達式/數組/集合),i是循環的變量
好比輸出0到5,在java是這樣寫的:函數

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

在Scala是這樣寫的,to和until的區別是,to包括後面的數字,until不包括後面的數字.scala

for (i <- 0 to 4) println(i)
for (i <- 0 until 5) println(i)

好比輸出數組的信息,java是這樣寫的:code

String[] arr = new String[]{"a", "b", "c"};
int length = arr.length;
for (int i = 0; i < length ; i++) {
    System.out.println(arr[i]);
}
for (String str : arr) {
    System.out.println(str);
}

在Scala是這樣寫的編譯器

val length = arr.length
for (i <- 0 to length - 1) println(arr(i))
for (i <- arr) println(i)

好比在輸出0到5的時候,不輸出3,java是這樣寫的:it

for (int i = 0; i < 5; i++) {
    if (i != 3) {
        System.out.println(i);
    }
}

scala是這樣寫的:編譯

for (i <- 0 to 4) {
  if (i != 3) println(i)
}

也能夠這樣寫,把條件寫在for裏面:class

for (i <- 0 to 4 if i != 3) println(i)

二維數組的打印,java是這樣寫的:

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
        System.out.println("i=" + i + ",j=" + j);
    }
}

scala是這樣寫的:

for (i <- 0 until 2; j <- 0 until 2) println("i=" + i + ",j=" + j)

while

while的用法,就和java那邊基本是同樣了,好比打印0到5的語句:

var num = 0
while (num < 5) {
  println(num)
  num += 1
}

中斷

在java中,咱們用break和continue對for或者while進行跳出循環或者跳出當前循環的。scala是用breakable這個高階函數來作的。
好比輸出0到4,當到3的時候跳出循環。
java是這樣寫的:

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        if (i == 3) {
            break;
        }
        System.out.println(i);
    }
}

scala是這樣寫的:

import util.control.Breaks._
def main(args: Array[String]): Unit = {
    breakable(
      for (i <- 0 until 5) {
        if (i == 3) {
          break()
        }
        println(i)
      }
    )
}

好比輸出0到4,當到3的時候跳出當前循環。
java是這樣寫的:

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        if (i == 3) {
            continue;
        }
        System.out.println(i);
    }
}

scala是這樣寫的:

import util.control.Breaks._
def main(args: Array[String]): Unit = {
    for (i <- 0 until 5) {
      breakable(
        if (i == 3) {
          break()
        }else
        println(i)
      )
    }
}
相關文章
相關標籤/搜索