Scala第十一章节(Option类型和偏函数)

2. Option类型

2.1 概述

实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是 比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效 的避免空指针异常。

2.2 格式

Scala中,Option类型表示可选值。这种类型的数据有两种形式:

  • Some(x):表示实际的值
 final case class Some[+A](x:A) extends Option[A]{
      def isEmpty: Boolean = false

      def get: A = x
    }
  • None:表示没有值
case  object None extends Option[Nothing]{
  def isEmpty: Boolean = true

  def get: Nothing = throw new NoSuchElementException("None.get")
}

注意: 使用getOrElse方法,当值为None时可以指定一个默认值.

2.3 示例

需求
  1. 定义一个两个数相除的方法,使用Option类型来封装结果

  2. 打印结果

  • 不是除零,打印结果
  • 除零, 则打印异常错误
参考代码
//案例:演示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 格式

val 对象名={//这对大括号及其内部的一组case语句,就组成了一个偏函数.
      case1=>表达式1   
    	case2=>表达式2
      case3=>表达式3
    ...
}

3.3 示例一: 入门案例

需求

定义一个偏函数,根据以下方式返回

输入 返回值
1
2
3
其他 其他
参考代码
//案例:演示偏函数
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. 定义一个列表,包含1-10的数字
  2. 请将1-3的数字都转换为[1-3]
  3. 请将4-8的数字都转换为[4-8]
  4. 将其他的数字转换为(8-*]
  5. 打印结果.
参考代码
//案例:偏函数使用,结合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)
     }
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 05:44:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 05:44:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 05:44:07       82 阅读
  4. Python语言-面向对象

    2024-03-24 05:44:07       91 阅读

热门阅读

  1. pytorch图像数据集定义

    2024-03-24 05:44:07       33 阅读
  2. 24计算机考研调剂 | 华南师范大学

    2024-03-24 05:44:07       37 阅读
  3. 【保姆级讲解如何在Ubuntu中设置中文输入法】

    2024-03-24 05:44:07       41 阅读
  4. MongoDB聚合运算符:$indexOfArray

    2024-03-24 05:44:07       43 阅读
  5. 小程序中实现轮播图左向堆叠

    2024-03-24 05:44:07       49 阅读
  6. Python学习笔记07

    2024-03-24 05:44:07       34 阅读
  7. 如何实现JWT Token的自动续期

    2024-03-24 05:44:07       37 阅读
  8. 数据分析-Pandas分类数据的类别处理

    2024-03-24 05:44:07       45 阅读
  9. jenkins 自动下载 环境依赖包,下载超时、报错

    2024-03-24 05:44:07       41 阅读
  10. 供应链攻击揭秘:识别、防范与应对

    2024-03-24 05:44:07       44 阅读
  11. 13 转钱和查询余额

    2024-03-24 05:44:07       36 阅读
  12. 普通用户权限运行Docker

    2024-03-24 05:44:07       38 阅读
  13. MongoDb数据库介绍安装使用

    2024-03-24 05:44:07       34 阅读
  14. 英语面试研究

    2024-03-24 05:44:07       31 阅读