Scala 函数响应式编程: 静态类型 (Static Types)

2016.12.3,  北京, Ken Fang

函数响应式编程为使函数内的代码更加的强壮, 便需在代码编译的阶段时, 就要能确定传入函数的参数类型, 是符合领域模型中的商业规则。也就是说, 藉由编译器形成一过滤器; 只让符合领域模型中商业规则的参数类型, 能传入到函数中。

举个简单的例子:

假设, 只有 saving account 能有利息的收入, 而checking account 便没有利息的收入。

Scala 藉由静态类型 (Static Types) 的实现的方式, 使得编译器形成一过滤器; 只让 saving account 的参数类型, 能传入到函数中, 进行利息的计算, checking account 的参数类型, 便会被过滤掉。

trait Account {

  def number: String

  def name : String

  //...

}

case class CheckingAccount(...) extends Account

trait InterestBearingAccount extends Account {

  def rateOfInterest: BigDecimal

}

case class SavingsAccount(...) extends InterestBearingAccount

case class MoneyMarketAccount(...)extends InterestBearingAccount

def calculateInterest[A <: InterestBearingAccount](account: A, period: DataRange) = {

}

参数类型 A 必需是 InterestBearingAccount 的 subtype; 所以, 只要不是 InterestBearingAccount 的 subtype 的 account, 便不能传入到函数 calculateInterest 中, 去计算利息。 

也就是说, 函数 calculateInterest 便只需专注在如何实现利息的计算。而将商业规则的校验; 只有 saving account 才能有利息的收入; 交由编译器去处理。所以, 我们便也不需给函数 calculateInterest 写测试代码; 为了校验所传入的 account 是否为 saving account ?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏顶级程序员

Python 工匠:善用变量来改善代码质量

我一直觉得编程某种意义上是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目。

843
来自专栏Python小屋

图解Python多修饰器时哪个先起作用

修饰器本质上是一个函数,它接收一个函数作为参数并返回一个修饰过的新函数,一般来说不会改变函数的功能,只是在外围增加一些辅助性的检查或小功能。

743
来自专栏Aloys的开发之路

基于对象和面向对象的区别

基本上每个程序员都听过面向对象(Object-oriented)和基于对象(Object-based)这两个概念。其实这两个概念并没有很明显的界线,不过现在业界...

1809
来自专栏WeaponZhi

轻松初探 Python 篇(五)—dict 和 set 知识汇总

这是「AI 学习之路」的第 5 篇,「Python 学习」的第 5 篇 dict dict 是 Python 内置的字典类型,熟悉 Java 的同学可以把它类比...

2889
来自专栏申龙斌的程序人生

零基础学编程033:字符串的split拆分与join连接

在《零基础学编程021:获取股票实时行情数据》这一节里,我们学了split()函数,可以将一个字符串切开。假设有一个历史行情字符串,信息包括:股票名称、开盘价、...

27711
来自专栏我杨某人的青春满是悔恨

《编程的智慧(初稿)》读后感

王垠更新了文章,加入了Optional跟Union比较的内容,所以我也来更新一下。垠神认为Optional并没有什么卵用,Java8的Optional我不是很了...

712
来自专栏GreenLeaves

初识javascript

1.简介:Javascript是Netscape(网景)公司与Sun公司(现被甲骨文收购)合作开发的一款是网页具备交互能力的程序设计语言。 2.与之功能相同的语...

1569
来自专栏GopherCoder

『Go 语言学习专栏』-- 第二期

1075
来自专栏landv

C语言介绍

1512
来自专栏编程之旅

Python——搞定烦人的字符串编码

在学习Python之前,就听说过Python的版本圣战,最可怕的是有的写Py3的程序员觉得Py2是另一种语言....所以在刚开始学习的时候,我索性把Python...

653

扫码关注云+社区