声明式和函数式 JavaScript 原则

命令式与声明式代码

这是两种不同的编写代码的方式,我们也称之为范式;

命令式

  • 程序员需要解释"如何去一步步的做事";
  • 我们向计算机解释它为了达到某一种结果所必须遵循的每一个;
  • 例如:需要制作一个蛋糕,我会向食谱一样,需要把每一步都告诉计算机,这样它才能得到一个蛋糕;
js 复制代码
const arr = [2, 4, 6, 8];
const doubled = [];
for (let i = 1; i < arr.length; i++) {
  doubled[i] = arr[i] * 2;
}

声明式

  • 程序员只需要告诉计算机"做什么东西";
  • 我们只是简单的描述了计算应该如何去实现结果;
  • 具体实现的步骤说明被抽象了;
  • 例如:需要制作一个蛋糕,我只需要告诉计算机我想要一个什么样的蛋糕,具体你去怎么做出来这个蛋糕,我并不关心;
js 复制代码
const arr = [2, 4, 6, 8];
const doubled = arr.map(n => n * 2);

函数式

  • 它也属于是声明式函数范式;
  • 声明式编程的核心思想是通过组合许多纯函数来编写软件,从而避免副作用和数据的变更。再这种编程范式中,程序员专注于描述"做什么",而不是"如何做";
  • 副作用:在函数执行过程中对函数外部任何数据的修改(例如,修改外部变量,在控制台记录信息,对文档对象模型写入等)。副作用可能导致程序行为的不确定性,使得代码更难以理解和维护。
  • 纯函数: 是指不产生副作用的函数。这类函数不依赖外部变量,给定相同的输入,始终返回相同的输出。纯函数的特性使得它们更易于测试和重用;
  • 不可变性:在这种编程范式中,状态(数据)永远不会被直接修改!相反,状态会被复制,并对副本进行变更后的返回。这种不可变性有助于避免意外的状态改变,提高程序的可靠性和可预测性;

react和vue两者对声明式和函数式编程方面都提供了不通的实现方式。React更加倾向于通过纯函数和Hooks来实现无副作用的组件设计,而VUE则通过响应式数据绑定和模板语法来简化UI更新和状态管理;

函数式编程技巧

  • 尽量避免数据的修改:在函数式编程中,保持数据的不可变性是非常重要的。通过创建新的数据结构而不是直接修改现有数据,可以减少副作用,提高代码的可维护性和可预测性。
  • 使用不产生副作用的内置方法:选择那些不会改变原始数据的内置数组和对象方法,例如map()filter()reduce()。这样的方法可以帮助你保持函数的纯粹性,使得每个函数的输出只依赖于其输入,而不依赖于外部状态。
  • 进行数据转换:可以使用map()filter()reduce()等方法来进行数据转换和聚合操作,充分利用这些高阶函数来简化代码逻辑,使代码更简洁且易于理解。
  • 尽量避免函数中的副作用:尽管在某些情况下避免副作用可能不是总能做到的,但应尽量使函数保持纯粹,只依赖其输入参数来生成输出,避免对外部状态的影响。

声明式语法

  • 使用数据和对象解构:通过解构赋值,可以方便地提取数组或对象中的值,使代码更加简洁且易于阅读。
  • 使用扩展运算符(...):展运算符可以用来快速复制数组或对象,或者将多个数组合并为一个。这种语法使得数据操作更加直观,减少了冗余代码。
  • 使用三元运算符(条件运算符):三元运算符可以方便地进行条件判断,从而使得代码在处理简单条件时更加简洁,避免多行的if-else语句。
  • 使用模板字面量:模板字面量提供了一种更灵活的字符串拼接方式,可以在字符串中直接嵌入变量,简化了字符串的构建过程,使代码更加清晰易读。
相关推荐
AI很强2 分钟前
matlab常见的配图代码实现1
开发语言·算法·matlab
打野赵怀真6 分钟前
render函数中return如果没有使用()会有什么问题?
前端·javascript
Riesenzahn8 分钟前
css在页面上画一个正方形,边长为页面宽度的一半
前端·javascript
tommyrunner10 分钟前
Cursor rule文件测试 一秒了解AI行为规则文件
前端·cursor
北京_宏哥15 分钟前
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
java·前端·selenium
Nu1120 分钟前
weakMap 和 weakSet 原理
前端·面试
顾林海22 分钟前
深入理解 Dart 函数:从基础到高阶应用
android·前端·flutter
鲤籽鲲23 分钟前
C# Enumerable类 之 数据排序
开发语言·c#·c# 知识捡漏
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧23 分钟前
C语言_数据结构总结6:链式栈
c语言·开发语言·数据结构·算法·链表·visualstudio·visual studio