编程范式——初探函数式编程

引入

策略模式 VS 函数式编程

Java8中介绍Lambda表达式时,从硬编码到策略模式,再到内部类一步步优化而来。理论上来说,我们用Lambda表达式实现的功能,用策略模式、匿名函数也能实现,但为什么还要引入Lambda表达式呢?

我暂时理解到的包含以下几方面:

  1. 代码不易读,结构复杂;
  2. 每增加一种策略,都要新建一个实现类,不易维护;
  3. 如果有一万种情况呢,是否要新建一万个策略或匿名类呢?

而函数式编程可以很方便的解决以上问题,函数式编程的优点及应用情况:

  • 易于重构、调试、测试
  • 整体应用:数学计算、人工智能
  • 局部应用:已遍地开花

概念

——使用函数进行编程,需要回到函数本身的概念上:

函数,在数学中,为两集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素。例如实数x对应到其平方x2的关系就是一个函数,若以3作为此函数的输入值,所得的输出值便是9。——维基百科

注意:

  • 要将概念与表现形式区分
    函数强调的是一种映射关系,具体实现可以有多种方式,对于函数的应用方来说,可以不用考虑其具体实现。
  • 一个函数可以有不同的表现方式
    平方关系的表现方式可以有:y=x2、多项式展开、泰勒展开等

特性

编程范式——初探函数式编程_第1张图片
无副作用(纯函数):不会修改程序的状态

  • 引用透明的

一等公民

  • 作参数传递
  • 作结果返回
  • 存储于数据结构

高阶函数–可实现复杂参数的简单化处理

  • 接收至少一个函数作为参数
  • 返回结果是一个函数

应用

  1. 闭包:一种引用了外部作用域变量的特殊函数
    js中的闭包示例
<script>
var global = "outer"

function outer(){
	var global = "inner";
	var a = 5
	function inner(){
		console.log(global)
		console.log(a++)
	}
	return inner;
}

var r = outer();
r()
</script>
  1. 柯里化:模块化函数和重用代码的技术,将一个多参函数转化为一系列只接收一个参数函数的过程

你可能感兴趣的:(算法)