Spark学习(4)——scala条件控制与循环
if表达式
If表达式的定义:在scala中,if表达式是有值得,就是if或者else中最后一行语句返回的值
例如:val age =30;if(age>18) 1 else 0
运行结果:
将if表达式赋值给一个变量:val result = if(age>18) 1 else 0
If表达式的类型推断:由于if表达式是有值的,而if和else子句的值类型可能不同,此时if表达式的值类型是什么呢,scala会自行推断,取两个类型的公共父类型
例如: if(age>18) 1 else 0,1和0都是int,所以返回值类型也是int
例如: if(age>18) “adult” else 0,此时if和else的值类型分别是String和int,则表达式的值类型是Any,Any是String和int的公共父类型。
如果if后面没有跟else 则默认else的值是Unit,也用()表示,类似于Java中的void或者null,
例如val age =30;if(age >18) “adult”,此时就相当于if(age >18) “adult” else ()
语句终结符、块表达式
默认情况下,scala不需要语句终结符,默认将每一行作为一个语句
一行放多条语句:如果一行要放多条语句,则必须使用语句终结符
例如:使用分号作为语句终结符,
Var a,b,c =0;if(a<10){b=b+1;c=c+1},运行结果如下:
通常来说,对于多行语句,还是会使用花括号的方式
If(a<10){
b=b+1
c=c+1
}
块表达式:块表达式,指的就是{}中的值,其中可以包含多条语句,最后一个语句的值就是块表达式返回的值。
例如:var d =if(a<10){b=b+1;c=c+1;b+c}
输入与输出
Print和println:print打印时不会加换行符,println打印时会加个换行符
例如:print(“hello world”);println(“hello world”)
Printf:printf可以用于格式化,例如:printf(“hi my name is %s,\n”,”张三”)
readLine:readLine允许我们从控制台读取用户输入的数据,类似Java中的System.in和Scanner的作用
例如:
Val name =readLine(“welcome ,please tell me your name”)
Print(“please tell me your age”)
Val age =readInt()
If(age >18){
Printf(“Hi ,%s,you are %d years old”,name,age)
}else{
Printf(“Hi ,%s,you are %d years old”,name,age)
}

循环
While do循环:scala有while do循环,基本语义与Java相同,例如:var n =10
While(n >0){
Print(n+” ”)
n-=1
}
Scala 没有Java那种for循环,可以使用scala独有的简易for循环
简易版for循环:var n=10 ;for(i <- 1 to n) print(i+” ”)
使用until:表示不达到上限,for( I <- 1 until n) print(i+” ”),如运行结果,不包括上边界10
也可以对字符串进行遍历,类似于Java的增强for循环, for(c <- “Hello World”) print(c)
跳出循环
Scala没有提供类似于Java的break语句
但是可以使用boolean变量,return,或者Breaks的break函数来替代使用
例如:
Import scala.util.control.Breaks._
Breakable{
var n =10
for(c <- “Hello World”) {
If(n== 5) break
Print(c)
n -=1
}
}
高级for循环
多重for循环
for(I <- 1 to 9;j< - 1 to 9){
If(j==9){
Println(I * j+” ”)
}else{
Print(I * j+” ”)
}
}
If 守卫 取偶数,scala可以在for语句中加入if判断,例如:for(I <- 1 to 10 if i%2 ==0) print(i)
for 推导式,构造集合
例如:for(I <- 1 to 10) yield i