javascript函数式编程简单介绍

快乐打工仔 分类:实例代码

函数式编程现在越来越流行,但是当前网上对它的介绍还比较少。

下面就结合自己学习函数式编程的一些经验和网上查询的资料在这里对它做一下简单的介绍。

目的是让读者能够对函数式编程方式有一个概念上的初步了解。

一.函数式编程的概念:

所谓的函数式编程就是一种编程范式。

主要编程思想就是将运算过程尽量写成一系列的函数嵌套形式。

先看一个简单的代码实例:

现在有如下数学表达式:

(1 + 2) * 3 - 4

传统的过程式编程,可能这样写:

var a = 1 + 2;
var b = a * 3;
var c = b - 4;

如果使用函数式编程的方式实现上述计算,可以编写为以下形式:

function add(a,b) {
  return a + b;
}
function multiply(a,b) {
  return a * b;
}
function subtract(a, b) {
  return a - b;
}
var result = subtract(multiply(add(1, 2), 3), 4);
console.log(result);

上面的代码实现了简单的函数式编程。

当然上面的代码只是为了表达函数式编程代码编写方式。如此简单代码如果再用函数式编程那就是自找苦吃。

二.函数式编程的特点:

下面介绍一下函数式编程的一些特点,当然我们不能说是函数式编程独有的,因为那是程序代码允许的规则,只是函数式编程要充分使用这些规则,罗列如下:

(1).函数式第一类的对象:

也就是说,函数 不依赖于任何其他的对象而可以独立存在,而在面向对象的语言中,函数 ( 方法 ) 是依附于对象的,属于对象的一部分。所以函数可以赋值给其他的变量,作为参数传递给其他函数,或者作为其他函数的返回值。

var func = function () {
  //code
}

函数可以赋值给其他变量。

function map(array, func) {
  var res = [];
  for (var index = 0, len = array.length; index < len; index++) {
    res.push(func(array[index]));
  }
  return res;
}
var mapped = map([1, 3, 5, 7, 8], function (n) {
  return n = n + 1;
});
console.log(mapped);

上面的代码就是将函数作为参数进行传递。

function func() {
  var n = 5;
  return function (a) {
    return a + n;
  }
}
console.log(func()(1));

上面的代码就是将函数作为参数返回。

(2).只是进行运算,不参与I/O:

函数式编程初衷是只进行计算,而不进行I/O读写操作。

也就是说我们的目的尽量保证,只进行计算操作得出结果,尽可能少的去参与I/O读写操作,以保持计算的单纯性。

当然I/O读写操作是不可避免的,但是我们可以做到尽可能的少。

(3).不产生副作用:

在普通的javascript操作中,可能会经常操作全局变量,代码如下:

var num = 0;
function func(a) {
  num = a + 1;
}
func(1);

上面的代码会修改全局变量num,这就是所谓的副作用。

而函数式编程目的是为了进行纯粹的计算,并得出一个计算结果,所以不会产生副作用(当然需要我们控制)。

(4).使用参数保存状态:

在非函数式编程语言中,我们可能会使用全局性的一些变量来保存状态,但是函数式编程要求不产生副作用,在第三个特点已经进行介绍。所以我们可以使用参数进行状态保存,代码实例如下:

function reverse(string) {
  if (string.length == 0) {
    return string;
  }
  else {
    return reverse(string.substring(1, string.length)) + string.substring(0, 1);
  }
}
var str = "pipipi.net";
console.log(reverse(str));

上面的代码可以将字符串反转,通过递归操作来完成的,参数string保存了当前字符串的状态。

具体实现过程可以参阅javascript实现将字符串逆序排列代码实例一章节。

(5).引用透明:

由于不会产生副作用,保存状态也不使用外部变量,只是进行单纯的计算操作,所以任何时候只要参数相同,引用函数所得到的返回值总是相同的。其他类型的语言,函数的返回值往往与系统状态有关,不同的状态之下,返回值是不一样的。

javascript函数式编程简单介绍,这样的场景在实际项目中还是用的比较多的,关于javascript函数式编程简单介绍就介绍到这了。

javascript函数式编程简单介绍属于前端实例代码,有关更多实例代码大家可以查看

回复

我来回复
  • 暂无回复内容