blog
blog copied to clipboard
Explore Functional Programming
一直对函数式编程抱有很强的好奇心,也奇怪为什么没有契机去初探下,刚好参加了首届中国
React Dev Conf
,会上很多主题或多或少与函数式编程有关,其中工业聚
有关 FP 主题分享,让我对 FP 有关概念以及实践有了很大兴趣。
本文持续更新,主要是我逐渐理解函数式这个编程思想、实践的历程,所以所有内容不保证对错。只是自我实现路径上的一小点。
另外因为目前从事前端方面的工作,目标语言是
JS
,如果真的想深入 FP,建议还是要看Haskell
What is the Functional Programming ?
函数式编程其实是一种编程思想,同时常见的还有命令式编程(Imperative programming)。
FP 强调使用 函数
解决问题
这里的 函数
,其实是指数学中的函数,也就是 映射关系,也就是函数的返回值仅依赖于函数的参数,不依赖于其他状态,也不会改变原参数。
函数式编程关心数据的映射,命令式编程关心解决问题的步骤
函数式语言中函数作为一等公民,也就是说函数可以在任意地方定义,并且函数可以作为函数的参数进行传递,所以我们可以进行函数与函数的组合使用(JS也借此特点方便地应用FP思想)
在纯种的函数式编程语言中,数据是不可变的,或者说没有变量这个概念,所有的数据一旦产生,就不能改变其中的值,如果要改变,那就只能生成一个新的数据。
总结 FP
主要的几个特点
- 声明式 也是函数式编程的一个特点,关心what to do,而不是how to do
-
pure function 函数不受除参数之外的状态影响;函数不会修改任何外部状态(比如全局、传入的参数)
- 满足纯函数的特性也叫做 引用透明度,大概的解释是 纯函数只是传入参数与返回结果的一个映射,不会产生
Side Effect
- 满足纯函数的特性也叫做 引用透明度,大概的解释是 纯函数只是传入参数与返回结果的一个映射,不会产生
-
Immutable Data
数据不可变
是函数式编程的一个约定,为了是达到避免BUG,方便追踪状态,使不同函数不依赖与共享同一状态,提高可维护性。- 修改数据采用根据旧状态产生返回新状态的方式