scala学习
条件分支
if-else语句
-
基本语法同java
-
在scala中,每一条语句都有其返回值,if-else语句也不例外,其返回值为满足条件的代码体中最后一句语句的返回值
-
因此scala取消了三元运算符,因为其可以直接用if-else语句实现,实现方法如下:
// java // a?1:2 // scala if (a) 1 else 2
switch语句
- scala中取消了switch语句,通过模式匹配来处理类似需求
循环控制
for循环
- scala为for循环提供了很多的特性,这些for循环的特性被称为for推导试或者for表达式
范围数据循环的方法:
-
方法1:
for (i <- 1 to 3){ println(i + "") } /* 输出结果如下: 1 2 3 */
-
方法2:
for (i <- 1 until 3){ println( i + "" ) } /* 输出结果如下: 1 2 */
循环守卫
-
循环守卫即循环保护式,又称为条件判断式、守卫。
- 当保护式的值为true的时候进入循环体,否则跳过,类似continue
-
基本语法:
for (i <- 1 to 3 if i != 2) { println(i + "") } /* 输出结果如下: 1 3 */
循环步长
-
基本语法:
for (i <- 1 to 10 by 2){ println( i + "" ) } /* 输出结果如下: 1 3 5 7 9 */
所谓步长,即每次循环后i自增长的大小
嵌套循环
-
基本语法:
for (i <- 1 to 3; j <- 1 to 3){ println(s"i=$i,j=$j") } /* 输出结果如下 i=1,j=1 i=1,j=2 i=1,j=3 i=2,j=1 i=2,j=2 i=2,j=3 i=3,j=1 i=3,j=2 i=3,j=3 */
两个不同的循环范围间通过’;'来分隔。
引入变量
-
基本语法:
for (i <- 1 to 3; j = i*2){ println(s"i=$i,j=$j") } /* 输出结果如下 i=1,j=2 i=2,j=4 i=3,j=6 */
在for语句中有多个表达式的时候,通过’;'进行分隔
在for推导式中,如果有多个表达式,一般一行一句表达式,并且通过花括号替换圆括号
只有只存在一句表达式的时候使用圆括号。
依照这个习惯,上面的案例可以写为:
for { i <- 1 to 3 j = i * 2 } { println(s"i=$i,j=$j") }
这种写法与上面的写法等价
循环的返回值
-
基本用法:
val result = for (i <- 1 to 3)yield i println(result) /* 输出结果如下: Vector(1, 2, 3) */
可以看到,通过关键字yield将返回的值封装到了一个vector集合中
同时,yield关键字后面可以是一个逻辑代码块,如:
val result = for (i <- 1 to 3) yield { var j = "the string" j + i } /* 输出结果如下: Vector(the string1, the string2, the string3) */
while循环
- 基本语法同java
- 与if语句不同的是,while语句没有返回值,或者说,while语句的结果是Unit类型
- 因此,当需要用该语句来计算并返回结果的时候,就不可避免地会使用变量,可是这样就会在循环内修改循环外地变量,违反了函数式编程地重要思想(输入–>函数–>输出,不对外界造成影响),故而比起weile语句,更推荐使用for语句。
do……while循环
- 使用方法同java