概览
(scala语句和表达式几乎都有值) PK (java中语句有值,表达式执行动作)
1.条件表达式
if(x>0) 1 else -1
可以将表达式结果直接赋值给变量
val s = if(x>0) 1 else -1
scala支持混合型表达式
if(x>0) "positive" else -1
在scala中每个表达式都应有值
if(x>0) 1 else () //()表示Unit类,即占位符
2.语句终止、表达式赋值与输出打印
①.scala行尾一般不添加;结尾
②.表达式赋值的返回值为Unit,所以scala不支持x=y=1这种连续赋值[结果为y=1,x=Unit是没有意义的]
③.scala既支持java风格的println/print方式输出,也支持c风格的printf格式输出
3.循环
①.while循环
int x=10
int i=0
while(x>0){
i+=x
x-=1
}
②.for循环: [1 to n]是一个Range集合
int r=0
int n=10
for(i<-1 to n){
r+=i
}
当不需要上限时,使用util代替to
String s = "hello"
for(i<-0 until s.length){
print(i)
}
或者简写为
for(ch<-"hello") print(ch)
③.高级for
多个生成器,逗号分隔
for(i<-1 to 3;j<-1 to 3) print("i*j="+i*j +" ")
守卫:if开头的Boolean表达式
for(i<-1 to 3;j<-1 to 3 if j!=i ) print("i*j="+i*j +" ")
使用定义,比如定义from
for(i<-1 to 3;from = 4-i; j<-from to 3 ) print("i*j="+i*j +" ")
④.for推导式:for循环体以yield开始,会生成一个集合,每次迭代生成集合中的一个值
for(i<-1 to 10) yield i*3
4.函数
scala的方法操作对象,而函数不是。
函数定义:函数名、参数、函数体
函数返回值:无需定义return,默认使用最后一个表达式返回;类型为=右侧表达式的类型
def abs(x:Double)=if(x>=0) x else -x
递归函数需要定义返回值类型
def fac(n:Int) :Int = if(n<=0) 1 else n*fac(n-1)
5.过程
如果函数体包含在{}中但没有前面的=,则返回值类型为Unit,这类函数称为过程。