Option类型
使用Option类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以返回一个Option类型来替代。
定义
scala中,Option类型来表示可选值。这种类型的数据有两种形式:
如果some指定了一个数,那从这里面取getOrElse方法结果都是该指定的数,若Option为空,则取出的getOrElse值是后面的指定的值,与option无关。就是一个默认的缺省值一样。
Some(x):表示实际的值
None:表示没有值
使用getOrElse方法,当值为None是可以指定一个默认值
例子: case
定义一个两个数相除的方法,使用Option类型来封装结果
然后使用模式匹配来打印结果
不是除零,打印结果
除零打印异常错误
/**
* 定义除法操作
* @param a 参数1
* @param b 参数2
* @return Option包装Double类型
*/
def dvi(a:Double, b:Double):Option[Double] = {
if(b != 0) {
Some(a / b)
}
else {
None
}
}
def main(args: Array[String]): Unit = {
val result1 = dvi(1.0, 5)
result1 match {
case Some(x) => println(x)
case None => println("除零异常")
}
}
例子: getOrElse
重写上述案例,使用getOrElse方法,当除零时,或者默认值为0
def dvi(a:Double, b:Double) = {
if(b != 0) {
Some(a / b)
}
else {
None
}
}
def main(args: Array[String]): Unit = {
val result = dvi(1, 0).getOrElse(0)
println(result)
}
例子: if判断
//1、获取操作后的返回值
println(toInt("23"))
println(toInt("23").get)
println(toInt("abc"))
// println(toInt("abc").get) ---->报错误,因为没有返回值
val xx = if (toInt("foo").isDefined) toInt("foo") else 0
println("处理结果:"+xx)
isEmpty,nonEmpty,idDefined
注意 :空字符isEmpty是true
!seq.isEmpty -> seq.nonEmpty
seq.size == 0 -> seq.isEmpty
seq.size != 0 -> seq.nonEmpty
!(seq.length > 1) -> seq.isEmpty
!option.isEmpty -> option.isDefined
option == None -> option.isEmpty
option != None -> option.isDefined
scala> "".isEmpty
res0: Boolean = true
scala> "xx".isEmpty
res1: Boolean = false
scala> None.nonEmpty
res2: Boolean = false
scala> None.isEmpty
res3: Boolean = true
scala> Some("").isEmpty
res4: Boolean = false
scala> Some("ss").isEmpty
res5: Boolean = false
scala> Some("ss").nonEmpty
res6: Boolean = true
scala> Some("").nonEmpty
res7: Boolean = true