Play scala 6 函数式的异常处理

1.捕获异常给了我们恢复程序的机会。这是异常存在的好处。

异常也使程序的可读性变差,比如异常带来了依赖于上下文的变量替换,可能出现异常的方法不是类型安全的(即:不会像它的接口承诺地那样运行)

函数式异常处理的主要思想是: 不抛出异常,而是返回一个值,指示异常已经发生。就像C语言中的return code.

2.看一个“偏函数”:对参数的值有一定前提假设的函数

def mean(xs: Seq[Double]): Double =
    if (xs.isEmpty)
      throw new ArithmeticException("mean of empty list")
    else xs.sum / xs.length

3.折中的解决方法:既要能够方便地添加异常处理逻辑,用于修复程序,又要能够类型安全,保证函数的函数性

  sealed trait Option[+A]
  case class Some[+A](get: A) extends Option[A]
  case object None extends Option[Nothing]
  def mean(xs: Seq[Double]): Double =
    if (xs.isEmpty) None
    else Some(xs.sum / xs.length)
时间: 2024-08-18 12:28:33

Play scala 6 函数式的异常处理的相关文章

Scala编程--函数式对象

本章的重点在于定义函数式对象,也就是说,没有任何可变状态的对象的类.作为运行的例子,我们将创造若干把分数作为不可变对象建模的类的变体.在这过程中,我们会展示给你Scala面向对象编程的更多方面:类参数和构造函数,方法和操作符,私有成员,子类方法重载,先决条件检查,同类方法重载和自指向. 6.1 类Rational的式样书 一个,或许不怎么重要的,发现是数学上,分数不具有可变的状态.一个分数加到另外一个分数上,产生的结果是一个新的分数.而原来的数不会被“改变”.我们将在本章设计的不可变的Ratio

【scala】 scala 条件控制 和异常处理(二)

1.scala 变量定义 ,var val 区别. var 定义可变变量 val 定义不可变变量,scala 推荐使用.相当于Java的final 变量. scala中包含的基本数据类型详情如下表所示: 序号 基本类型 增强类型 大小 取值范围 1 Byte RichByte 8-bit -128 ~ 127 2 Char RichChar 16-bit 0 ~ 65535 3 Short RichShort 16-bit -32768 ~ 32767 4 Int RichInt 32-bit

从函数式编程异常处理到薛定谔类型 -- 函数式编程本质(I)

首先说明一下 这里并不打算展开讲函数式异常处理 因为这篇文章的主题是介绍薛定谔类型. 关于前者我推荐medium上的一篇文章"Functional Error Handling". 本文很大程度上是受到这篇文章的启发 一句话来说 很多语言都有自己函数式处理异常的方式 也许你已经用过了 只是没有认识到这一点而已: Typescript的Union类型 Swif的Option类型 Haskell的Maybe类型 如果要给这种类型下个定义 那就是薛定谔类型(非公式说法) 怎么用薛定谔类型处理

Scala的函数式对象

本节主要是通过一个关于有理数的案例来说一些知识点. 包括几大方面:1.类的创建 2.重载方法 3.检查先决条件 4.添加字段 5.自指向 6.辅助构造器 7.私有字段和方法 8.定义操作符 9.隐士转换 先贴个代码哈!!!!!! object Test{ def main(args: Array[String]): Unit = { val a = new Rational(1,2) println(a) val b = new Rational(2,3) println(b) val c =

scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)

胜败兵家事不期,包羞忍耻是男儿--斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习scala的一些特性后,深深被scala函数式和面向对象的风格所折服,不得不赞美设计这门语言的设计者.小象大学阶段在使用MATLAB做数据分析和自动化设计时,就非常喜欢使用MATLAB的命令行和面向矩阵运算的风格编写分析代码:喜欢使用java编写层次化和清晰的模块接口,而这些Scala语言设计中都有

第3课 Scala函数式编程彻底精通及Spark源码阅读笔记

本课内容: 1:scala中函数式编程彻底详解 2:Spark源码中的scala函数式编程 3:案例和作业 函数式编程开始: def fun1(name: String){ println(name) } //将函数名赋值给一个变量,那么这个变量就是一个函数了. val fun1_v = fun1_ 访问 fun1_v("Scala") 结果:Scala 匿名函数:参数名称用 => 指向函数体 val fun2=(content: String) => println(co

【Scala】Scala函数式编程初探

函数式编程 函数式编程是种编程典范,它将电脑运算视为函数的计算.函数编程语言最重要的基础是 λ 演算(lambda calculus).而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值).和指令式编程相比,函数式编程强调函数的计算比指令的执行重要.和过程化编程相比,函数式编程里,函数的计算可随时调用. 命令式编程是面向计算机硬件的抽象,有变量(对应着存储单元),赋值语句(获取,存储指令),表达式(内存引用和算术运算)和控制语句(跳转指令),一句话,命令式程序就是一个冯诺依曼机的指令序列

Scala入门系列(九):函数式编程

引言 Scala是一门既面向对象,又面向过程的语言,Scala的函数式编程,就是Scala面向过程最好的佐证.也真是因此让Scala具备了Java所不具备的更强大的功能和特性. 而之所以Scala一直没有替代Java,一是因为Java诞生早,基于Java开发了大量知名的工程,并且最重要的是Java现在不只是一门编程语言,而是一个庞大的技术生态圈,所以未来十年内Scala也不会完全替代Java,但是Scala会在自己特有的领域大发光彩.   将函数赋值给变量 Scala中函数是一等公民,可以独立定

Scala函数式编程(五) 函数式的错误处理

前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结构 上 Scala函数式编程(四)函数式的数据结构 下 1.面向对象的错误处理 在介绍scala的函数式的错误处理之前,我们要先来介绍一下其他情况下的错误处理方式. 以java为例,常见的错误处理方式不外乎两种,一种是及时捕捉到异常,然后当场进行处理. try{ ... }catch(Excepti