」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 JavaScript 中編寫簡潔且可維護的程式碼的最佳實踐

在 JavaScript 中編寫簡潔且可維護的程式碼的最佳實踐

發佈於2024-11-07
瀏覽:899

Best Practices for Writing Clean and Maintainable Code in JavaScript

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

1. 一致的代码格式:

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

// Bad formatting
function calculateSum(a,b){
    return a   b;
}

// Good formatting
function calculateSum(a, b) {
  return a   b;
}

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

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

// Bad naming
const x = 5;

// Good naming
const numberOfStudents = 5;

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

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

// Bad practice
function calculateSumAndAverage(numbers) {
  let sum = 0;
  for (let i = 0; i 



4.避免全局变量:

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

// Bad practice
let count = 0;

function incrementCount() {
  count  ;
}

// Good practice
function createCounter() {
  let count = 0;

  function incrementCount() {
    count  ;
  }

  return {
    incrementCount,
    getCount() {
      return count;
    }
  };
}

const counter = createCounter();
counter.incrementCount();

5. 错误处理和鲁棒性:

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

// Bad practice
function divide(a, b) {
  return a / b;
}

// Good practice
function 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 practice
function calculateAreaOfRectangle(length, width) {
  return length * width;
}

function calculatePerimeterOfRectangle(length, width) {
  return 2 * (length   width);
}

// Good practice
function calculateArea(length, width) {
  return length * width;
}

function calculatePerimeter(length, width) {
  return 2 * (length   width);
}

7. 明智地使用评论:

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

// Bad practice
function calculateTotalPrice(products) {
  // Loop through products
  let totalPrice = 0;
  for (let i = 0; i 



8.优化性能:

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

// Bad practice
function findItemIndex(array, target) {
  for (let i = 0; i 



9. 编写单元测试:

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

// Code
function sum(a, b) {
  return a   b;
}

// Test
test('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 practice
let total = 0;

function addToTotal(value) {
  total  = value;
}

// Good practice
function 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 代码的质量,使其更易于理解、维护和协作,并确保软件项目的长期成功。一致性、可读性、模块化和错误处理是争取干净且可维护的代码时要牢记的关键原则。快乐编码!

版本聲明 本文轉載於:https://dev.to/wizdomtek/best-practices-for-writing-clean-and-maintainable-code-in-javascript-1phb?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用 Gorilla Websocket 在 Go Websocket 應用程式中向特定用戶端發送目標訊息?
    如何使用 Gorilla Websocket 在 Go Websocket 應用程式中向特定用戶端發送目標訊息?
    Go with Gorilla Websocket 中的特定客戶端訊息傳遞在websocket 通訊領域,向特定客戶端發送訊息的能力對於建立即時應用程式至關重要。然而,預設的 websocket 範例通常會示範同時向所有連線的用戶端廣播訊息。 為了解決這個問題,我們可以採用一種方法,為每個客戶端分配...
    程式設計 發佈於2024-11-08
  • O - 開閉原理 (OCP)
    O - 開閉原理 (OCP)
    What is Open/Closed Principle(OCP)? According to the Open/Closed Principle, "Objects or entities (such as classes, modules, functions, etc.) ...
    程式設計 發佈於2024-11-08
  • C 的力量:創造一個為世界提供動力的系統
    C 的力量:創造一個為世界提供動力的系統
    C 是一種強大的程式語言,因其高效、可移植和低階控製而聞名。它廣泛用於開發關鍵任務系統,如作業系統、嵌入式系統和資料結構。其特點包括:高效率:C 程式碼直接編譯為機器碼,實現更高執行效率。可移植:C 可以跨多種平台運行,方便在各種裝置上部署應用程式。低階訪問:C 提供對硬體和記憶體的低階訪問,允許精...
    程式設計 發佈於2024-11-08
  • Google Sheets 到 MySQL 只需幾分鐘
    Google Sheets 到 MySQL 只需幾分鐘
    Google Sheets 数据导入 MySQL:初学者指南 您是否希望将 Google Sheets 数据转换为 MySQL 数据库?如果是这样,那么您来对地方了!在这个适合初学者的教程中,我们将引导您完成将 Google Sheets 数据导入 MySQL 数据库的过程。 如果您没有编码背景,请...
    程式設計 發佈於2024-11-08
  • 如何在 MySQL 中將紀元數字轉換為人類可讀的日期?
    如何在 MySQL 中將紀元數字轉換為人類可讀的日期?
    在 MySQL 中將紀元數轉換為人類可讀的日期在資料庫管理領域,經常需要將紀元數轉換為人類可讀的日期。紀元編號表示自訂紀元以來的某個時間點,通常用於在 MySQL 等資料庫系統中儲存時態資料。 假設您有一個紀元編號,例如 1389422614485,它代表一個特定的時間點。該值的資料類型是varch...
    程式設計 發佈於2024-11-08
  • 介紹 simpledev.css
    介紹 simpledev.css
    simpledev.css 是一個新的 CSS 框架,我將其描述為大多數無類別框架。我稱之為無類,因為許多程式碼使用類型選擇器,因此您不必添加許多類別來設定網頁樣式。有一些類,但我們盡量將它們保持在最低限度(到目前為止只有大約 42 個類)。 讓我們回顧一下下面的一些功能! 特徵...
    程式設計 發佈於2024-11-08
  • 掌握影像分割:傳統技術如何在數位時代仍然大放異彩
    掌握影像分割:傳統技術如何在數位時代仍然大放異彩
    介绍 图像分割是计算机视觉中最基本的过程之一,它允许系统分解和分析图像内的各个区域。无论您是在处理对象识别、医学成像还是自动驾驶,分割都可以将图像分解为有意义的部分。 尽管深度学习模型在这项任务中越来越受欢迎,但数字图像处理中的传统技术仍然强大且实用。本文回顾的方法包括阈值处理、边...
    程式設計 發佈於2024-11-08
  • 系統整合測試:確保無縫軟體集成
    系統整合測試:確保無縫軟體集成
    在軟體開發的動態環境中,確保系統的各個組件或模組無縫地協同工作對於提供可靠且高效能的軟體解決方案至關重要。這篇部落格文章深入探討了系統整合測試 (SIT),這是軟體測試生命週期中的關鍵階段,用於驗證整合組件之間的交互,確保系統的整體功能和可靠性。 什麼是系統整合測試? 系統整合測試 (SIT) ...
    程式設計 發佈於2024-11-08
  • 掌握 Angular Table 中可調整大小的欄位:開發人員逐步指南
    掌握 Angular Table 中可調整大小的欄位:開發人員逐步指南
    如何在 Angular 表中创建可调整大小的列:分步指南 Angular Material 表提供了一种时尚的数据显示方式。然而,用户通常需要额外的功能,例如调整表列大小以更好地控制数据显示的能力。在本指南中,我们将逐步介绍使用自定义指令在 Angular 表中创建可调整大小的列的...
    程式設計 發佈於2024-11-08
  • 如何依子值升序對多維 PHP 陣列進行排序?
    如何依子值升序對多維 PHP 陣列進行排序?
    PHP:以子值對多維數組進行排序此問題旨在根據「mid」子值對多維 PHP 數組進行排序。為了實現這一點,響應者建議使用 usort 函數,它允許基於比較的排序。 代碼如下:function cmp($a, $b) { return $a["mid"] - $b[...
    程式設計 發佈於2024-11-08
  • 如何在 Django 中創建一個簡單的調度程序
    如何在 Django 中創建一個簡單的調度程序
    如果您需要每X 分鐘/秒等運行一個函數來進行一些清理,觸發一些操作,您可以在線程模組和django 自訂cli 的幫助下執行一個簡單的調度程序命令。 假設我想每 5 秒呼叫一個函數以在外部 API 上發布一些內容。 在您的 django 應用程式中建立一個名為 management 的資料夾/包...
    程式設計 發佈於2024-11-08
  • 引導實用程式
    引導實用程式
    Bootstrap 實用程式是一組功能強大的類,可讓您的網站樣式設定更輕鬆、更快捷,而無需編寫自訂 CSS。讓我們深入了解基礎知識! 什麼是 Bootstrap 實用程式? Bootstrap 實用程式是預先定義的 CSS 類,您可以將它們直接套用於 HTML 元素以控制其外觀或行為。這些實用程...
    程式設計 發佈於2024-11-07
  • 修復下拉式選單/工具提示等隱藏的溢出
    修復下拉式選單/工具提示等隱藏的溢出
    您是否曾嘗試為您的按鈕建立下拉列表,然後選擇但隨後被溢出隱藏阻止? 然後你該怎麼做,然後你使用javascript將元素丟到DOM的根目錄,然後根據觸發元素矩形定位元素,每次佈局更改時重新計算,發生滾動和調整視窗大小,不是很有效的。 首先我想說的是它還沒有完全支持,但現在有一個polyfill可...
    程式設計 發佈於2024-11-07
  • 如何使用中間件方法有效處理 Gin Web 應用程式中的錯誤?
    如何使用中間件方法有效處理 Gin Web 應用程式中的錯誤?
    增強 Gin 中的錯誤處理Gin 的自訂錯誤處理涉及使用中間件來處理錯誤回應。這允許錯誤邏輯與正常流程邏輯分離。 錯誤處理中介軟體type appError struct { Code int Message string } func JSONAppErrorReporter...
    程式設計 發佈於2024-11-07
  • 如何使用 Python 和 Medium API 將文章發佈到 Medium
    如何使用 Python 和 Medium API 將文章發佈到 Medium
    介紹 作為使用 Obsidian 撰寫文章的人,我經常發現自己在發佈到 Medium 時需要手動複製和格式化我的內容。此過程可能非常耗時且重複,尤其是在處理 Markdown 文件時。為了簡化我的工作流程,我決定開發一個 Python 腳本,自動將 Markdown 檔案直接發佈到...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3