blog icon indicating copy to clipboard operation
blog copied to clipboard

Explore Functional Programming

Open nanyang24 opened this issue 5 years ago • 0 comments

一直对函数式编程抱有很强的好奇心,也奇怪为什么没有契机去初探下,刚好参加了首届中国 React Dev Conf,会上很多主题或多或少与函数式编程有关,其中 工业聚 有关 FP 主题分享,让我对 FP 有关概念以及实践有了很大兴趣。

本文持续更新,主要是我逐渐理解函数式这个编程思想、实践的历程,所以所有内容不保证对错。只是自我实现路径上的一小点。

另外因为目前从事前端方面的工作,目标语言是 JS ,如果真的想深入 FP,建议还是要看 Haskell

What is the Functional Programming ?

函数式编程其实是一种编程思想,同时常见的还有命令式编程(Imperative programming)

FP 强调使用 函数 解决问题 这里的 函数,其实是指数学中的函数,也就是 映射关系,也就是函数的返回值仅依赖于函数的参数,不依赖于其他状态,也不会改变原参数。

函数式编程关心数据的映射,命令式编程关心解决问题的步骤

函数式语言中函数作为一等公民,也就是说函数可以在任意地方定义,并且函数可以作为函数的参数进行传递,所以我们可以进行函数与函数的组合使用(JS也借此特点方便地应用FP思想)

在纯种的函数式编程语言中,数据是不可变的,或者说没有变量这个概念,所有的数据一旦产生,就不能改变其中的值,如果要改变,那就只能生成一个新的数据。

总结 FP 主要的几个特点

  1. 声明式 也是函数式编程的一个特点,关心what to do,而不是how to do
  2. pure function 函数不受除参数之外的状态影响;函数不会修改任何外部状态(比如全局、传入的参数)
    • 满足纯函数的特性也叫做 引用透明度,大概的解释是 纯函数只是传入参数与返回结果的一个映射,不会产生 Side Effect
  3. Immutable Data 数据不可变 是函数式编程的一个约定,为了是达到避免BUG,方便追踪状态,使不同函数不依赖与共享同一状态,提高可维护性。
    • 修改数据采用根据旧状态产生返回新状态的方式

nanyang24 avatar Aug 23 '18 15:08 nanyang24