转载请注明出处[https://www.jianshu.com/p/505d6d43b504]
序
Scala是一门面向对象的编程语言,但同时更是一款函数式编程语言。其基本用法与java还是存在一些差异,后面陆续总结一些这方面的差异便于日后查找。
运算符
运算符的用法很传统,但是注意Scala中不存在++或是--这样的表达,需要写成a+=1或是a=a+1这样的形式。
If语句的差异
判断句If..else的普通写法Scala一样兼容,但是与其他语言不同的是,Scala的If语句块可被看作是一个具有返回值的表达式,因此Scala中可以将If的的判断值直接赋给变量。例如:
class Person
class Student extends Person
class Worker extends Person
def getPerson(age:Int){
val p1 = if(age <= 25){
new Student()
}else{
new Worker()
}
}
上面代码的含义就是如果age<=25就实例化Student并赋给p1,否则实例化Worker。
for语句
Scala中的for语句基本格式:
for (i <- 1 to 5) println(i)
括号中的形式在Scala中被称为生成器,生成器可有多种形式,例如:
守卫者模式:
即:for的生成器中加入条件判断:
for (i <- 1 to 5 if i%2 == 0) println(i)
多生成器模式:
Scala中的多重for循环可简化为一个for中进行表达:
for (i <- 1 to 3; j<-1 to 2) println(i*j)
上面的代码可以依次输出1 2 2 4 3 6
多守卫者模式:
多生成器可以带有多个守卫者:
for (i <- 1 to 3 if i%2 == 0; j <- 1 to 2 if i<2) println(i*j)
除了上述特性外,for还提供一个推导模式,即将for的结果作为返回值进行存储,其依赖yield关键字实现该功能:
val r = for (i <- 1 to 5 if i%2 == 0) yield {println(i); i}
其基本格式为:for(变量<-表达式) yield {语句块}