使用 JS 进行函数式编程
函数式编程是一种为处理纯数学函数而设计的编程范式。该范式专注于编写更加复合和纯粹的函数。
函数式编程是一种特殊的声明式编程。
首先,你需要了解声明式编程和命令式编程的区别,它们是 JavaScript 的范式或组织代码的技术。
在命令式编程中,我们指定描述流程控制的程序逻辑。
let name = "Ali";
let Greeting = "Hi, ";
console.log(Greeting , name); // Hi, Ali
相反,声明式编程我们指定程序逻辑而不描述流程控制
const Greeting = (name) => {
console.log('Hi, ',name);
}
Greeting("Ali"); // Hi, Ali
因此,正如你所注意到的,函数式编程注重代码的整洁、有序和重用,通过
- 纯函数:简单且可复用。它们完全独立于外部状态(全局变量),易于重构、测试和调试。纯函数是指给定相同输入,始终返回相同输出的函数。
const add = (x,y) => x+y;
add(5,4) // 9
Math.random
是非纯函数的一个常见例子。
非纯函数的另一个例子:
let count = 0;
const incCount = (value) => count += value;
- 高阶函数:它们可以接收一个函数作为参数(回调),也可以返回一个函数,它们对于编写复杂的函数非常有帮助。
const animals = ["Cat", "Dog", "Elephant",
"Giraffe", "Lion", "Monkey"];
const zooWithoutCat = animals.filter(animal => animal !== "Cat");
注意 ==> 不要迭代,您可以使用高阶函数,如 map、filter、reduce、find...
let numbers = [2, 4, 6];
let numbersX2 = numbers.map(number => number*2); // [ 4, 8, 12 ]
- 避免可变性:您必须避免更改数据。
let num1 = [1, 2, 3];
let num2 = num1;
num2 的任何变化都会影响 num1(可变性),我们可以通过使用高阶函数或扩展运算符来解决这个问题。
let num2 = [...num1];
- 持久数据结构,实现高效的不变性
将所有数据视为不可变的、永远不会改变的。
不可变性的问题在于,你需要复制所有数据才能进行微小的更改,这会给你带来效率问题,因为你将使用大量空间。那么解决方案是什么呢?
别担心,
有很多 JS 库可以解决这个问题,例如:
- 森
- Immutable.js
- 下划线
- Lodash
- Ramda 它们依赖于结构共享思想
注意黄色方块是 2 个变量之间共享的。
感谢您的时间,
您可以在 LinkedIn 上添加我:链接