# 函数式编程
# What - 函数式编程
什么是函数式编程?
函数式编程通过使用函数来将值转化为抽象的单元,接着用于构建软件系统。
一种以命令式的方式构建系统
函数式编程的目的是使用函数来抽象作用在数据之上的控制流
和操作
,从而在系统中消除副作用
并减少对状态的改变
# 思想
对比OO 对于OO来说,是将一个问题分解为多组名词或不同的对象
在一个面向对象系统的内部,我们发现对象间的交互会引起各个对象内部状态的变化,而整个系统的状态转变则是由许许多多小的,细微的状态变化混合来形成的,这些相互关联的状态变化,形成了一个概念上的变化网,我们时不时会因为他而感到困惑,当需要了解其带来的微妙且广泛的状态变化时,这种困惑就会成为一个问题。
比如:在前端领域:JavaScript 是一种拥有很多共享状态的动态语言,慢慢的,代码就会积累足够的复杂性,变得笨拙难以维护。面向对象设计能帮我们在一定程度上解决这个问题,但是还不够。由于有很多的状态,所以处理数据流和变化的传递显得尤为重要。
面向对象编程(OOP)通过封装变化使得代码更易理解。 函数式编程(FP)通过最小化变化使得代码更易理解。 -- Michacel Feathers(Twitter)
函数式方法将相同的问题分解为多组动词或者函数。
函数式编程如何构建系统 取一个值,逐渐的将他改变 —— 通过一个原始的或者组合的函数,变成另一个值
相比之下,函数式系统则努力减少可见的状态修改,因此,向一个遵循函数式原则的系统添加新功能就成了理解如何在存在局限的上下文环境中,无破坏性的数据转换—— (例如原始数据永不发生变化),来实现新的函数。
函数式程序类似一个用于转换数据的机器,实践中的函数式编程并不以献消除状态改变为主要目的,而是将任何已知系统中突变的出现尽量压缩到最小区域中去。
# Why
擅长处理集合数据(对象,数组)
# How
- 高阶函数
map, reduce
# Basic
函数是一等公民 当函数被看做是 一等公民时,那他就可以去任何值可以去的地方,很少有限制。 函数和传值是一样的。
# JavaScript 编程方式
- 命令式编程
- 基于原型的面向对象的编程
- 元编程
# 特点
# 高阶函数
- 是一等公民
- 以一个函数作为参数
- 以一个函数作为返回结果
尽可能的使用函数而不是值
# 幂等性
执行无数次后还具有相同的效果