Plain Functional Programming by Martin Odersky - 笔记

前言

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

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

最大的挑战是复杂性, 复杂性可能来源于需求的变化, 开发者的变动, 态度 等等
在这里插入图片描述

为什么需要函数式编程?

因为函数式编程在复杂性管理方面, 移除了复杂性中的一个重要的维度: 查看历史代码.
在这里插入图片描述

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

语法数量如下图所示: 所谓大道至简.
在这里插入图片描述
函数式编程是另外一种范式, 没有以前的经验, 所以看起来比较难
在这里插入图片描述
在这里插入图片描述

函数式编程家族

在这里插入图片描述

函数式编程的好处

“函数式编程就是把所有东西都参数化”
在这里插入图片描述
但是这样会带来问题
在这里插入图片描述
一种解决方案是使用Monad进行抽象
在这里插入图片描述

例子: 配置

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

在这里插入图片描述

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

但是隐式参数太多也会导致问题
在这里插入图片描述
解决办法是, 声明一个隐式函数类型
在这里插入图片描述
在这里插入图片描述
这个 Configured[T] = implicit Config => T 就是带隐式参数的函数, 这样我们就可以把代用隐式参数的函数转换成 Configured[T] 类型了
在这里插入图片描述

代数效应: 多个隐式参数函数类型顺序可以任意变换, 类似于集合 , 比如 下面的Possibly[Configured[A]]Configured[Possibly[A]] 是一样的
在这里插入图片描述
相比于 Kleisli, 隐式函数类型可以省略很多参数
在这里插入图片描述
在这里插入图片描述

构建者模式

在这里插入图片描述
scala 的实现方式
在这里插入图片描述

总结

在这里插入图片描述

  • 简化是最终的目标
  • 函数式编程有用, 但不是银弹
  • 抽象有用, 但是引入固有的额外的复杂性
  • 需要平衡各方开销
  • 有时候(Martin说大部分时候) 纯函数是更好的选择
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值