Plain Functional Programming by Martin Odersky - 笔记

Plain Functional Programming by Martin Odersky - 笔记

前言

来自 @演讲: Plain Functional Programming by Martin Odersky

软件工程中最大的挑战是什么?

最大的挑战是复杂性, 复杂性可能来源于需求的变化, 开发者的变动, 态度 等等
Plain Functional Programming by Martin Odersky - 笔记

为什么需要函数式编程?

因为函数式编程在复杂性管理方面, 移除了复杂性中的一个重要的维度: 查看历史代码.
Plain Functional Programming by Martin Odersky - 笔记

为什么 Scala 和 Haskell 看起来不像是简单的语言?

语法数量如下图所示: 所谓大道至简.
Plain Functional Programming by Martin Odersky - 笔记
函数式编程是另外一种范式, 没有以前的经验, 所以看起来比较难
Plain Functional Programming by Martin Odersky - 笔记
Plain Functional Programming by Martin Odersky - 笔记

函数式编程家族

Plain Functional Programming by Martin Odersky - 笔记

函数式编程的好处

“函数式编程就是把所有东西都参数化”
Plain Functional Programming by Martin Odersky - 笔记
但是这样会带来问题
Plain Functional Programming by Martin Odersky - 笔记
一种解决方案是使用Monad进行抽象
Plain Functional Programming by Martin Odersky - 笔记

例子: 配置

使用 Kleisli 和 Arrow 来构建一个读配置的程序

Plain Functional Programming by Martin Odersky - 笔记

当参数的太多的时候, 使用隐式参数来简化

但是隐式参数太多也会导致问题
Plain Functional Programming by Martin Odersky - 笔记
解决办法是, 声明一个隐式函数类型
Plain Functional Programming by Martin Odersky - 笔记
Plain Functional Programming by Martin Odersky - 笔记
这个 Configured[T] = implicit Config => T 就是带隐式参数的函数, 这样我们就可以把代用隐式参数的函数转换成 Configured[T] 类型了
Plain Functional Programming by Martin Odersky - 笔记

代数效应: 多个隐式参数函数类型顺序可以任意变换, 类似于集合 , 比如 下面的Possibly[Configured[A]]Configured[Possibly[A]] 是一样的
Plain Functional Programming by Martin Odersky - 笔记
相比于 Kleisli, 隐式函数类型可以省略很多参数
Plain Functional Programming by Martin Odersky - 笔记
Plain Functional Programming by Martin Odersky - 笔记

构建者模式

Plain Functional Programming by Martin Odersky - 笔记
scala 的实现方式
Plain Functional Programming by Martin Odersky - 笔记

总结

Plain Functional Programming by Martin Odersky - 笔记

  • 简化是最终的目标
  • 函数式编程有用, 但不是银弹
  • 抽象有用, 但是引入固有的额外的复杂性
  • 需要平衡各方开销
  • 有时候(Martin说大部分时候) 纯函数是更好的选择
上一篇:PAT浙大版《C语言程序设计(第3版)》练习题


下一篇:面向过程和面向对象