functional programming

- 1 min

简单的梳理一下函数式编程的相关知识点。

定义

首先来看什么才是函数式编程(functional programming)

来自 wikipedia 的定义

In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data…

来自中文 wikipedia

函数式编程(英语:functional programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)

特点

根据定义,我们可以得出函数式编程的几个特点:

一些好处

函数式编程的很多优势,都是围绕着纯函数这个概念的。

因为是纯函数,所以输入不变,那么输出肯定是不变的;因为这种前后的一致性,就为测试带来了很大的便利。

另外,因为是纯函数,其实也就并不存在全局变量的这个概念,所有的数据就是在类似pipe的管道中流动,每个函数的输出都是一个全新的数据,并不会修改传入的数据;因为无副作用,所以可以说函数式编程是”安全”的。

一些概念

Currying

这里的 Currying 并不是咖喱,而是传说中的柯里化。 简单来说,柯里化就是将多参数的函数变成单参数的函数,例如:

// origin:
function add (x, y) {
	return x + y
}
var a = add(1, 2)

// after currying:
function add(x) {
	return function (y) {
		return x + y
	}
}

var b = add(1)(2)

这样看起来柯里化似乎没有什么优势,但是再看一下接下来的代码:

var a = add(10, 1)
var b = add(10, 2)
var c = add(10, 3)

可以看到这三次调用,都是在10的基础上再加上一个参数,那么运用柯里化,可以改造成这样:

function addNumber(x) {
	return function (y) {
		return x + y
	}
}

var addTen = addNumber(10)

var a = addTen(1)
var b = addTen(2)
var c = addTen(3)

每次只传入一个参数,看起来清爽,调用起来也更自由。这里只是个最简单的应用,在更多参数的情景中,柯里化的作用会更加明显。

Monad

Monad 可以理解为是函数式编程的单元,一个 Monad

// 未完待续

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora