函数范式现在是一个很"时髦"的词, 仿佛什么语言,库带上了函数式就变得高大上起来了. 但实际上我问过很多人什么是函数式?, 几乎的回答都是lambda表达式, 可以传递函数, Java8流式API或者RxJava等等. 当然这些也是函数范式带来的东西, 但始终都没有点到核心, 或者说"我们为什么需要这些东西". 在没有明白函数范式真正想要达到的事情之前, 盲目使用这些函数式工具无异于杀猪用牛刀.

除此之外其实也有不少人也尝试去理解真正的函数范式, 但函数范式中包含大量高度抽象的概念和数据结构, 一上来就是单子, 自函子, 幺半群, Monoid, Monad等等范畴论的概念; 同样由于函数范式提倡用少量高度优化的数据结构实现复杂功能, 每种数据结构都同样难以理解; 加上Haskell中的do语法这些工具在Java和Kotlin中原生并没有, 实践起来也极其困难, 直接劝退了大量的学习者.

但虽然函数范式非常抽象, 但也非常强大, 而且也非常实用, 本人已经在大量的实际项目和库中使用了其思想, 或者说现在已经被"严重毒害"了(笑). 就实际经验经验而言, 它是可以非常循序渐进地融入项目, 而对项目确实能非常好地控制项目的复杂度.

但本人其实从2016年入坑到现在只有并不长的时间, 也很不学院派, 只是希望后续文章能通过个人的一些实践经验回答以下一些问题:

  1. 函数范式核心思想是什么? 它想要解决什么问题?
  2. 函数范式是否具有实用性? 它和面向对象的区别
  3. 函数范式中是如何构建一个程序的?

文章中尽量使用Kotlin语言作为主语言, 但不可避免会间歇插入Haskell, Scala的代码

与之相应的还有FRP(functional reactive programming)函数响应式编程, 这个概念也是最近提得很多的, 但大多数人并不能回答"为什么用了它程序就完全不同了", 当并不明白这一点之前, 其实很多地方的用法就是错误的, 在之后的文章也许会相应的提到这相关的知识点.

本人只是普通的Android开发人员, 时间通常也不太充裕, 文章中有哪些不正确的地方, 欢迎大家提出

也欢迎关注个人的Github: Yumenokanata


Yumenokanata
30 声望157 粉丝

Haskell中毒极深的Android开发工程师


引用和评论

0 条评论