在很多地方Scala都很像Java,但是比Java更为函数式编程,这句话主要从三句话就可以理解“一切都是对象”,“一切都是函数”以及“一切都是表达式”三方面理解。
首先是一切都是对象,这大概和Python很像,因为即便是数字1都有一系列的方法,所以我们可以调用1.toDouble将Int类型的1转换为Double类型的1。
然后是一切都是函数,表现为可以重载操作符,Python很像,在一定程度上我总觉的Scala是Java和Python生的孩子,只不过遗传基因比较大的卵子是Java提供的,而比较小的那颗精子则是Python提供的。
最后是一切都是表达式,if(){}else{}这样的语句块是有返回值的。
代码语言:javascript复制val x = if(a>3)"true"else"false"
所以x的值根据a的大小要么是"true"要么为"false"
在了解了Scala三种特性后正式开启
Scala的类结构
Scala的集合
Scala的集合系统地区分为不可变集合和可变集合。顾名思义,可变集合可以进行修改/删除/增加/,而不可变集合是永久都不会变的,但是并不意味着不可以进行增删改的操作,只不过每一个试图改变不可变集合的后果都是返回一个新的集合。
不可变集合
Scala的可变集合
Scala容器和Java容器的互换
Scala的容器可以在转换为Java容器,只要import scala.collection.JavaConverters._,比如Java中的ArrayList是没有map,filter操作的,但是只要导入了这个包,就可以进行隐式的转换,Java中的集合也可以调用Scala集合中的方法。
Scala中的Try对象
Scala中的Try对象的作用等同与Java中的Try{}catch(){}finally{}结构
Try类有Sucess和Failure两个子类,将有可能会出现异常的代码传入Try类的构造器中,若执行成功则为Sucess则返回正确值,反之为Failure,存储失败的异常,当然可以通过方法来控制失败时的默认值。比如将一个字符串转换为整型,可能会出现不能转换的异常。但是我们可以通过getOrElse方法设定Failure时的默认值。
代码语言:javascript复制val a = Try("123".toInt).getOrElse(0)
Scala中的Option对象
Option 对象存在的意义在于处理引用变量没有引用任何对象的情况,其实就是空指针的情况。
Java中出现空指针时出现最多的异常就是NullPointerException,Scala为了避免这种情况,将Null进行抽象,封装为了Option对象,Option对象有两个子类,Some代表有值,而None代表没值,比如在map中我们试图获得一个不存在的Key的Value值,Java会报异常,所以在取值时我们需要判断一下是否存在这个Key值,然后再决定是否取,而在Scala中,则不需要这么麻烦,直接调用get方法成功返回的则是Some,失败则是None.具体写法如下:
代码语言:javascript复制val value = map.get(key) match {
case Some(i) => i
case None => default
}
同样地,也可以通过getOrElse()来设定在结果为None时默认的返回值。
Option其实也是集合的一种,可以进行迭代,因此可以通过模式匹配或者是foreach来获得Option的值