2. Option类型
2.1 概述
实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是 比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效 的避免空指针异常。
2.2 格式
Scala中,Option类型表示可选值。这种类型的数据有两种形式:
- Some(x):表示实际的值
scala
final case class Some[+A](x:A) extends Option[A]{
def isEmpty: Boolean = false
def get: A = x
}
- None:表示没有值
scala
case object None extends Option[Nothing]{
def isEmpty: Boolean = true
def get: Nothing = throw new NoSuchElementException("None.get")
}
注意: 使用getOrElse方法,当值为None时可以指定一个默认值.
2.3 示例
需求
-
定义一个两个数相除的方法,使用Option类型来封装结果
-
打印结果
- 不是除零,打印结果
- 除零, 则打印异常错误
参考代码
scala
//案例:演示Option类型
object ClassDemo10{
//1.定义一个两个数相除的方法,使用Option类型来封装结果 defdiv(a:Int,b:Int)={
if(b==0){
None //除数为0,没有结果.
}else{
Some(a/b)//除数不为0,返回具体的结果.
}
}
def main(args:Array[String]):Unit={
//2.然后使用模式匹配来打印结果
val result=div(10,0)
//思路一:通过模式匹配来打印结果.
result match{
//不是除零,打印结果
case Some(x)=>println(x)
//除零打印异常错误
case None=>println("除数不能为0")
}
println("-"*15)
//思路二:采用getOrElse()方法实现.
println(result.getOrElse(0))
}
}
3. 偏函数
3.1 定义
偏函数提供了更简洁的语法,可以简化函数的定义。配合集合的函数式编程,可以让代码更加优雅。 所谓的偏函数是指被包在花括号内没有match的一组case语句, 偏函数是PartialFunction[A, B]类型的的一个实例对象, 其中A代表输入参数类型, B代表返回结果类型.
3.2 格式
scala
val 对象名={//这对大括号及其内部的一组case语句,就组成了一个偏函数.
case 值1=>表达式1
case 值2=>表达式2
case 值3=>表达式3
...
}
3.3 示例一: 入门案例
需求
定义一个偏函数,根据以下方式返回
输入 | 返回值 |
---|---|
1 | 一 |
2 | 二 |
3 | 三 |
其他 | 其他 |
参考代码
scala
//案例:演示偏函数
object ClassDemo11{
def main(args:Array[String]):Unit={
//1.定义一个偏函数,根据指定格式返回
val pf:PartialFunction[Int,String]={
case1=>"一"
case2=>"二"
case3=>"三"
case_=>"其他"
}
//2.调用方法
println(pf(1))
println(pf(2))
println(pf(3))
println(pf(4))
}
}
3.4 示例二:结合map函数使用
需求
- 定义一个列表,包含1-10的数字
- 请将1-3的数字都转换为[1-3]
- 请将4-8的数字都转换为[4-8]
- 将其他的数字转换为(8-*]
- 打印结果.
参考代码
scala
//案例:偏函数使用,结合map函数
object ClassDemo12{
def main(args:Array[String]):Unit={
//1.定义一个列表,包含1-10的数字
val list1=(1to10).toList
//核心:通过偏函数结合map使用,来进行模式匹配
val list2=list1.map{
//2.请将1-3的数字都转换为[1-3]
case xifx>=1&&x<=3=>"[1-3]"
//3请将4-8的数字都转换为[4-8]
case xifx>=4&&x<=8=>"[4-8]" //4将其他的数字转换为(8-*]
case _ =>"(8-*]"
}
//5.打印结果.
println(list2)
}
}