在 JavaScript 中编写简洁且可维护的代码的最佳实践

在 javascript 中编写简洁且可维护的代码的最佳实践

干净且可维护的代码对于任何软件项目的长期成功和可扩展性都至关重要。它改善了团队成员之间的协作,减少了错误的可能性,并使代码更易于理解、测试和维护。在这篇博文中,我们将探索一些用 javascript 编写干净且可维护的代码的最佳实践,并提供代码示例来说明每种实践。

1. 一致的代码格式:

一致的代码格式对于可读性至关重要。它可以帮助开发人员更快地理解代码并改善协作。使用一致且广泛接受的代码风格指南,例如 eslint 提供的指南,并配置您的编辑器或 ide 以自动相应地格式化代码。
示例:

// bad formattingfunction calculatesum(a,b){    return a + b;}// good formattingfunction calculatesum(a, b) {  return a + b;}

2. 描述性变量和函数名称:

为变量、函数和类使用描述性且有意义的名称。避免使用可能会让其他人感到困惑的单字母变量名称或缩写。这种做法增强了代码的可读性并减少了注释的需要。
示例:

// bad namingconst x = 5;// good namingconst numberofstudents = 5;

3.模块化和单一职责原则:

遵循函数和类的单一职责原则。每个函数或类都应该有一个单一的、明确定义的职责。这种方法提高了代码的可重用性,并使其更易于测试、调试和维护。
示例:

// bad practicefunction calculatesumandaverage(numbers) {  let sum = 0;  for (let i = 0; i < numbers.length; i++) {    sum += numbers[i];  }  const average = sum / numbers.length;  return [sum, average];}// good practicefunction calculatesum(numbers) {  let sum = 0;  for (let i = 0; i < numbers.length; i++) {    sum += numbers[i];  }  return sum;}function calculateaverage(numbers) {  const sum = calculatesum(numbers);  const average = sum / numbers.length;  return average;}

4.避免全局变量:

尽量减少全局变量的使用,因为它们可能导致命名冲突并使代码更难以推理。相反,请将代码封装在函数或模块中,并尽可能使用局部变量。
示例:

// bad practicelet count = 0;function incrementcount() {  count++;}// good practicefunction createcounter() {  let count = 0;  function incrementcount() {    count++;  }  return {    incrementcount,    getcount() {      return count;    }  };}const counter = createcounter();counter.incrementcount();

5. 错误处理和鲁棒性:

优雅地处理错误并提供有意义的错误消息或适当地记录它们。验证输入、处理边缘情况并使用适当的异常处理技术,例如 try-catch 块。
示例:

// bad practicefunction divide(a, b) {  return a / b;}// good practicefunction divide(a, b) {  if (b === 0) {    throw new error('cannot divide by zero');  }  return a / b;}try {  const result = divide(10, 0);  console.log(result);} catch (error) {  console.error(error.message);}

6. 避免代码重复:

代码重复不仅会导致代码臃肿,还会使维护和错误修复变得更加困难。将可重用代码封装到函数或类中,并努力采用 dry(不要重复自己)方法。如果您发现自己在复制和粘贴代码,请考虑将其重构为可重用的函数或模块。
示例:

// bad practicefunction calculateareaofrectangle(length, width) {  return length * width;}function calculateperimeterofrectangle(length, width) {  return 2 * (length + width);}// good practicefunction calculatearea(length, width) {  return length * width;}function calculateperimeter(length, width) {  return 2 * (length + width);}

7. 明智地使用评论:

虽然干净的代码应该是不言自明的,但在某些情况下需要注释来提供额外的上下文或澄清复杂的逻辑。谨慎使用注释并使其简洁且有意义。专注于解释“为什么”而不是“如何”。
示例:

// bad practicefunction calculatetotalprice(products) {  // loop through products  let totalprice = 0;  for (let i = 0; i < products.length; i++) {    totalprice += products[i].price;  }  return totalprice;}// good practicefunction calculatetotalprice(products) {  let totalprice = 0;  for (let i = 0; i < products.length; i++) {    totalprice += products[i].price;  }  return totalprice;  // the total price is calculated by summing up the prices of all the products in the array.}

8.优化性能:

高效的代码可以提高应用程序的整体性能。请注意不必要的计算、过多的内存使用和潜在的瓶颈。使用适当的数据结构和算法来优化性能。使用 chrome devtools 等工具分析和测量您的代码,以识别性能问题并相应地解决它们。
示例:

// bad practicefunction finditemindex(array, target) {  for (let i = 0; i < array.length; i++) {    if (array[i] === target) {      return i;    }  }  return -1;}// good practicefunction finditemindex(array, target) {  let left = 0;  let right = array.length - 1;  while (left <= right) {    const mid = math.floor((left + right) / 2);    if (array[mid] === target) {      return mid;    }    if (array[mid] < target) {      left = mid + 1;    } else {      right = mid - 1;    }  }  return -1;}

9. 编写单元测试:

单元测试对于确保代码的正确性和可维护性至关重要。编写自动化测试以涵盖不同的场景和边缘情况。这有助于及早发现错误,促进代码重构,并增强修改现有代码的信心。使用 jest 或 mocha 等测试框架来编写和运行测试。
示例(使用 jest):

// codefunction sum(a, b) {  return a + b;}// testtest('sum function adds two numbers correctly', () => {  expect(sum(2, 3)).tobe(5);  expect(sum(-1, 5)).tobe(4);  expect(sum(0, 0)).tobe(0);});

10.使用函数式编程概念:

函数式编程概念,例如不变性和纯函数,可以使您的代码更可预测且更易于推理。拥抱不可变的数据结构,并尽可能避免改变对象或数组。编写没有副作用的纯函数,并为相同的输入产生相同的输出,使它们更容易测试和调试。
示例:

// bad practicelet total = 0;function addtototal(value) {  total += value;}// good practicefunction addtototal(total, value) {  return total + value;}

11. 使用 jsdoc 记录代码

使用 jsdoc 来记录您的函数、类和模块。这有助于其他开发人员理解您的代码并使其更易于维护。

/** * adds two numbers together. * @param {number} a - the first number. * @param {number} b - the second number. * @returns {number} the sum of the two numbers. */function add(a, b) {  return a + b;}

12. 使用 linter 和格式化程序

使用 eslint 和 prettier 等工具来强制执行一致的代码风格,并在潜在问题成为问题之前将其捕获。

// .eslintrc.json{  "extends": ["eslint:recommended", "prettier"],  "plugins": ["prettier"],  "rules": {    "prettier/prettier": "error"  }}

结论:

编写干净且可维护的代码不仅仅是个人喜好的问题;这是一种职业责任。通过遵循本博文中概述的最佳实践,您可以提高 javascript 代码的质量,使其更易于理解、维护和协作,并确保软件项目的长期成功。一致性、可读性、模块化和错误处理是争取干净且可维护的代码时要牢记的关键原则。快乐编码!

以上就是在 JavaScript 中编写简洁且可维护的代码的最佳实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1493465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 15:42:45
下一篇 2025年12月15日 20:27:08

相关推荐

  • API 每小时数据的响应式 JavaScript 轮播

    我差点把一个不完整的解决方案误认为是一个已完成的解决方案,然后继续研究我的天气应用程序的其他部分!在制作应该显示 12 小时天气的轮播时,我想添加一项功能,该功能将有助于在当天结束时获取第二天的时间。然而,轮播并没有过渡到第二天,而是不断循环回到当天的开始时间,我错误地认为任务已经完成。哎呀! 最初…

    2025年12月19日
    000
  • 无聊的金融:花哨的记录保存 – 呼吁所有开源贡献者

    介绍: 嘿,金融和开源爱好者!准备好接受实际上非常令人兴奋的“无聊”剂量了吗?让我向您介绍 Boring Finance – 一个最小的模块化 Web 应用程序,它将为您的个人预算游戏增添趣味。 所以,在这个令人兴奋的介绍结束后(我可以看到你已经坐立不安了),让我们深入探讨“无聊”的东西…

    2025年12月19日
    000
  • JavaScript 中字符与字符串重叠

    编写一个函数,它接受两个字符串并显示出现在任一字符串中的字符(不带双精度)。 解决方案 function characteroverlap(array1, array2) { let occurrence = {}; let str = array1.concat(array2); // find …

    2025年12月19日
    000
  • React:保持组件纯净

    如果喜欢这篇文章,可以买一杯咖啡来支持buy me coffee 保持组件纯净 一些 javascript 函数应该是纯的。纯函数只执行计算,不执行其他操作。通过将组件编写为纯函数,您可以避免随着代码库的增长而出现的所有令人困惑的错误和不可预测的行为。您可以使您的组件易于管理。 纯度 那么我们如何创…

    2025年12月19日
    000
  • NPM 对等依赖关系深入:全面介绍

    作为 javascript 开发人员,我们都知道项目中存在两种不同的依赖项:dependency 和 devdependency,但是peerdependency 又如何呢? 在本系列中,我们将研究 javascript 中这种不太常见的依赖关系。我们将研究它们是什么,作为图书馆用户我需要了解什么,…

    2025年12月19日
    000
  • 使用 React 构建租赁物业管理平台

    movin’ in 是一个面向代理的租赁物业管理平台,具有用于管理物业、客户和预订的后端、用于租赁物业的前端和移动应用程序。 通过以下解决方案,您可以通过将其托管在具有至少 1GB RAM 的 Docker Droplet 上,以非常低的成本构建一个针对多个机构进行优化的完全可定制的房产…

    2025年12月19日
    000
  • 用于高效代码管理的 React 工具集

    简介 本文档概述了使用一组精选的工具和最佳实践来构建和管理 react 应用程序的综合方法。通过遵守这些准则,您可以创建可扩展、可维护且高效的应用程序。 状态管理 祖斯坦: 目的:提供一种简单且高性能的方法来管理全局应用程序状态。好处:清晰简洁的api。高效的更新和性能优化。与应用程序的其他部分轻松…

    好文分享 2025年12月19日
    000
  • 我做了一个组件库!

    经过多年的思考,我的人生该做什么,我终于得出了一个值得注意的结论,我想构建一个 React 组件库,但是如何构建?今天的旅程从了解组件库对开发人员来说具有无价价值的原因开始:它不仅涉及功能,还涉及设计的一致性、可重用性和优雅性。 第0步:是什么让我与众不同? 有很多组件库——Shadcn/UI、Ma…

    2025年12月19日
    000
  • 相位记录

    您好,欢迎来到我的博客!我正在学习 Javascript、HTML 和其他技能来学习全栈软件开发,并将在这里记录我的一些经验,以此来盘点我迄今为止的知识并分享我在此过程中学到的一些经验教训与其他新程序员一起。 这篇文章将讨论我在学习 Javascript 时所犯的一些错误,特别是在做我的第一个大项目…

    2025年12月19日
    000
  • 如何自定义PDFjs

    pdf.js 是一个很棒的开源项目,它经常更新并且不断添加新功能,但是从外观上看它很丑陋,或者可以说它看起来已经过时了。从 pdf.js 获取最新的 pdf 功能和修复,同时在演示文稿方面拥有流畅的外观怎么样? pdfjskit 的 pdf 查看器并不引人注目,它不会直接更改 pdf.js 的代码,…

    2025年12月19日
    000
  • 创建复选框的一些有效方法

    创建复选框有 3 种方法: 通过直接html代码通过js代码,创建每个元素、属性、内容并将子元素appendchild到父元素通过 js 代码,带有innerhtml 和模板文字 通过直接 html 代码: red green blue yellow 通过js代码,创建每个元素、属性、内容并将子级a…

    2025年12月19日
    000
  • 我从使用 Vuejs 构建计算器中学到了什么

    对于我的第四个项目,我使用 vue.js 开发了一个 计算器 应用程序。对于理解如何处理用户输入、显示动态结果以及使用 javascript 执行计算来说,这是一次宝贵的经验。以下是我在构建此应用程序时学到的主要经验教训的细分。 1. 处理用户输入并更新显示 计算器需要接受用户输入(数字和运算符)并…

    2025年12月19日
    000
  • 使用独立构建对 Nextjs 应用程序进行 Docker 化

    介绍 docker 近年来因允许将应用程序放置在容器内而受到欢迎。这些容器可以部署到任何环境,并且在所有环境中都以相同的方式工作,无论应用程序运行的平台如何,都提供统一行为。这些容器使用图像,它们是应用程序的副本或压缩快照。通过将它们放置在容器中,它们将完全按原样显示。这是一些人迫切需要的技术之一,…

    2025年12月19日
    000
  • 了解具有正确路由的 React Outlet

    本文将探讨 react 出口的功能以及 react 应用程序中的路由基础知识。首先也是最重要的,我们需要了解路由的基础知识 了解基础知识 在深入研究之前,让我们确保我们对 react router 有深入的了解。 什么是 react router? ​​react router 是一个流行的 jav…

    2025年12月19日
    000
  • 使用 Nodejs 和 Expressjs 构建网站

    本文深入介绍了使用 node.js 和 express.js 构建网站。 express.js 是在 node.js 之上创建健壮且可扩展的 web 应用程序的重要框架,今天的重点将是路由、中间件、模板引擎 和 cookie 会话。 概念亮点: app.use(回调)app.use(路径,回调)获取…

    2025年12月19日
    000
  • 用于现代 Web 开发的实用 React 库

    在本文中,我将讨论您可以在 React 项目中使用的库。 如果你喜欢我的文章,可以请我一杯咖啡:)给我买咖啡 1. 样式组件 它是一个使 CSS 在 React 应用程序中基于组件编写的库。由于它具有基于组件的结构,因此它允许您以模块化方式单独设置每个组件的样式。它还提供动态样式和主题之间的切换等功…

    2025年12月19日
    000
  • Nodejs v 发布:终止对 Windows 位的支持

    2024 年 10 月 16 日,随着 node.js v23.0.0 的发布,node.js 社区达到了一个重要的里程碑。这个最新版本引入了多项改进和新功能,但也带来了一个重要的变化:node.js 将不再支持 32 位 windows。 为什么放弃 32 位 windows 支持? 根据 git…

    2025年12月19日
    000
  • GitHub Actions 和 CI/CD 管道

    当然!以下是与 github actions 和 ci/cd 管道相关的关键概念和实践的全面摘要,以及我们讨论的示例: github actions 和 ci/cd 管道的关键概念 持续集成(ci): ci 涉及自动构建和测试代码更改,以确保它们与现有代码库良好集成。 github actions …

    2025年12月19日
    000
  • 技术如何彻底改变时尚:布兰尼夫精品店采用数字工具

    在当今快节奏的世界,科技正在影响着各个行业,时尚也不例外。从设计系列到管理库存和创造无缝的客户体验,数字工具已经改变了时尚品牌的运营方式。在 Braniff Boutique,我们采用了这些技术进步,以在电子商务领域保持领先地位。 科技在时尚中的作用 时尚一直是一个由创造力驱动的行业,但现在它越来越…

    2025年12月19日
    000
  • 如何使用 HTML 渲染器自动创建 PDF 文档

    自动化文档创建是许多 saas 产品的一项重要功能,无论是生成发票、报告还是证书。使用 html 渲染器,开发人员只需几行代码即可将动态 html 内容转换为高质量的 pdf 文档或 png 图像。在本指南中,我们将向您展示如何将 exoapi 的文档创建功能集成到您的 saas 产品中,从而节省时…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信