函数式编程并不是一种新的编程方法,但是这种方法近年来越来越流行。
这 这 这 这 能够 使用 写出 整洁 , , , , , 使用 使用 使用 使用 使用 使用 使用 使用 使用 使用 的 的 的 的 的 的 的
因此,当你学完 Sổ tay dành cho người mới bắt đầu JavaScript 之后,有必要进一步学习函数式编程。
如果 你 和 javaScript , 使用 种 编程 为 为 你 , , , 还 让 你 的 代码 易 易 易 易 , , , 也许 提升 提升 提升 代码
在本文中,我们将会探讨函数式编程的基本原理,然后介绍一些在 JavaScript 中使用这种编程方式的关锷。
命令式编程 so với 函数式编程
函数式编程的起源可以追溯到 20 世纪 30 年代 Lambda 运算的发明。
这 是 寻求 , , , , 函数 修改 修改 目标 目标 (如 数 数 组 组)))) 的 结构 结构
图片来源
可能 起来 , 对于 编程 而 言 , , , , 命令式 之间 的 区别 可以 可以 一 一 一 一 一 一 一
命令式:
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function getOdds(arr) {
let odds = [];
for (let i = 0; i < arr.length + 1; i++) {
if (i % 2 !== 0) {
odds.push(i);
}
}
return odds;
}
console.log(getOdds(arr)); // logs [1, 3, 5, 7, 9]
函数式:
function getOdds2(arr){
return arr.filter(num => num % 2 !== 0)
}
console.log(getOdds2(arr))
// logs [ 1, 3, 5, 7, 9 ]
const getOdds3 = arr => arr.filter(num => num % 2 !== 0)
console.log(getOdds3(arr))
// logs [ 1, 3, 5, 7, 9 ]
如你所见,两种方法工作方式完全不同。
命令式 定义 个 , 数据 以 获得 我们 的。 函数式 方法 则 使用 使用 函数 函数 定义 个 的 的 的 的 函数 函数 函数 函数 函数
当然,函数式编程运作的大部分复杂性对终端用程序嘚也杂
即使 仅 , , , , 优势 很 很 明显 了 代码 代码 简洁 、 、 更 读 读 读 读 、 、 、 、
为什么使用函数式程
Bạn sẽ không bao giờ làm được điều đó nữa.
许多 优势 一 简单 事实 事实。。 读 读 读 读 可以 可以 可以 可以 可以 , , , , , , ,简化了。
函数式编程通过渗透测试确保代码完整性
情况下,渗透测试会变得更加有效。这使得评估函数式代码的完整性更加哀
根据 Cloud Defense 的软件开发者 Barbara Ericson 的说法,JavaScript 应用总是应该进行渗透测试,并且函数式编程能使其更加も
这种易读性也简化了开发工作的管理流程。
使用 , , , , , , 多 多 , , , , , , , , , 程序 程序 中 中
函数式编程让代码更易读
然而函数式编程的优势不局限于评估代码,它还有助于开发。
事实上,函数式编程利用并放大了 JavaScript 自身的优点和缺点。
图片来源
Bạn có thể sử dụng JavaScript để phát triển ứng dụng JavaScript.
Bạn có thể sử dụng DevOps để phát triển DevOps và sử dụng JavaScript để phát triển JavaScript hay không.
函数式编程的关键工具
实际应用函数式编程之前需要了解一些关键工具和概念,我们一起看看。
1. 纯函数与非纯函数
在 最 , , , , , , , , , , , , , , , , , , , 着。
这样的函数就叫做“纯函数”,此外其它函数则叫做“非纯函数”。
function getSquare(items) {
var len = items.length;
for (var i = 0; i < len; i++) {
items[i] = items[i] * items[i];
}
return items;
}
这里的总体思想就是完全不影响源数据。
如果想要合并两个数组,不应该使用 Array.prototype.push()
(这会覆盖源数据),而应该使用 Array.prototype.concat()
方法,它会创建并返回一个新数组供你使用。
2. 匿名函数
匿名函数也是函数式编程的重要组成部分,它也是源于 Lambda 运算。
匿名函数,顾名思义,没有显式定义的函数名,它们是赋值给变量的函数,并通过变量来调用
alert((function(x) {
return !(x > 1)
? 1
: arguments.callee(x - 1) * x;
})(20));
这样 这样 是 容易 变量 变量 通过 通过 , , , , , , , , , , ,
3. 递归函数
函数式 编程 一 是 能 能 也 也 , , , , , , , , , , 通过 通过
function countDown(fromNumber) {
console.log(fromNumber);
let nextNumber = fromNumber - 1;
if (nextNumber > 0) {
countDown(nextNumber);
}
}
countDown(3);
这使得递归的实现更加简单——主要是由于程序员不再需要使用循环来实现。
然而 它 是 , , , , 自身 函数 函数 地 地 地 地 造成 , , , , 务必 务必 为 为 为 递归函数 定义 严格 终止 条件 条件 条件
总结
这 三 是 , , , 范围 范围 更 更 是 一 一 一 一 一 一 一 一
进入函数式编程的精彩世界,你会发现它的影响无处不在。事实上,它为如今许多常见 JavaScript 实蛵揂
换 话 , 编程 表面 , , , 编码 编码 深远 深远 深远 影响。。 正 , , , , , ,
Nhà xuất bản:Lập trình chức năng trong JavaScript cho người mới bắt đầu,Nhà xuất bản:Nahla Davies