Scala - 流程控制
Posted 大军
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala - 流程控制相关的知识,希望对你有一定的参考价值。
if
用if做流程控制的时候,包括单分支、双分支、多分支。
比如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的表达式是有返回值的,所以他还可以这样:
- 如果没有指定变量的类型,那编译器会自动推断
- 如果没有写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不包括后面的数字.
for (i <- 0 to 4) println(i)
for (i <- 0 until 5) println(i)
比如输出数组的信息,java是这样写的:
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是这样写的:
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里面:
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)
)
}
}
以上是关于Scala - 流程控制的主要内容,如果未能解决你的问题,请参考以下文章