」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 什麼是乾淨的程式碼以及為什麼它很重要

什麼是乾淨的程式碼以及為什麼它很重要

發佈於2024-07-30
瀏覽:906

What is Clean Code and Why it is important

只需要使用一次的代码可以随心所欲地编写。但是,在大多数情况下,遵守最佳实践和维护干净的代码至关重要。

请记住,您的代码可能会在以后被其他开发人员甚至您自己阅读。到那时,您的代码应该是不言自明的。每个变量、函数和注释都应该精确、干净且易于理解。这种方法不仅可以简化维护工作,还可以促进开发团队内部的协作和效率。

因此,当某人(或您)回来添加或修改您的代码时,将很容易理解每​​一行代码的作用。否则,您的大部分时间将花在试图理解代码上。对于在您的代码库上工作的新开发人员来说,也会出现同样的问题。如果代码不干净,他们将无法理解。因此,编写干净的代码非常重要。

什么是干净代码?

干净代码基本上是指

的代码
  1. 容易明白
  2. 易于调试
  3. 易于维护
  4. 评论写得很好,简短易懂
  5. 没有重复(冗余)代码并遵循 KISS 规则(保持简单,愚蠢!)

为了编写干净的代码,开发人员必须保持代码的一致性,并且开发人员需要遵循特定语言的最佳实践。

为什么清洁代码很重要?

当团队遵循简洁代码原则时,代码库变得更易于阅读和导航。这有助于开发人员快速理解代码并开始贡献。以下是为什么干净的代码很重要的一些原因。

1。可读性和可维护性: 当代码写得好、有良好的注释并遵循最佳实践时,很容易阅读和理解代码。一旦出现问题或错误,您就知道在哪里可以找到它。

2.调试: 干净的代码设计清晰、简单,可以更轻松地定位和理解代码库的特定部分。清晰的结构、有意义的变量名称和定义明确的函数使识别和解决问题变得更加容易。

3.提高质量和可靠性: 干净的代码遵循特定语言的最佳实践,并优先考虑结构良好的代码。它增加了质量并提高了可靠性。因此它消除了由于错误和非结构化代码而可能出现的错误。

现在我们了解了为什么干净的代码至关重要,让我们深入研究一些最佳实践和原则来帮助您编写干净的代码。


干净代码的原则

要创建出色的代码,必须遵守干净代码的原则和实践,例如使用小型的、定义良好的方法。

让我们详细看看。

1。避免硬编码数字

我们可以使用常量并将该值赋给它,而不是直接使用值。因此,将来如果我们需要更新该值,我们只需在一个位置更新它。

例子

function getDate() {
  const date = new Date();
  return "Today's date: "   date;
}

function getFormattedDate() {
  const date = new Date().toLocaleString();
  return "Today's date: "   date;
}

在此代码中,在某些时候发生了变化,需要将“今天的日期:”改为“日期:”。可以通过将该字符串分配给一个变量来改进这一点。

改进代码:

const todaysDateLabel = "Today's date: ";

function getDate() {
  const date = new Date();
  return todaysDateLabel   date;
}

function getFormattedDate() {
  const date = new Date().toLocaleString();
  return todaysDateLabel   date;
}

在上面的代码中,在需要时更改日期字符串变得很容易。它提高了可维护性。

2.使用有意义且具有描述性的名称
我们可以使用更具描述性的名称,而不是到处使用通用变量名称,这是不言自明的。变量名本身应该定义它的使用。

名称规则

  1. 选择描述性且明确的名称。
  2. 进行有意义的区分。
  3. 使用可发音的名称。
  4. 使用可搜索的名称。
  5. 用命名常量替换幻数。
  6. 避免编码。不要附加前缀或类型信息。

例子

// Calculate the area of a rectangle
function calc(w, h) {
    return w * h;
}

const w = 5;
const h = 10;
const a = calc(w, h);
console.log(`Area: ${a}`);

这里的代码是正确的,但代码中有一些含糊之处。让我们看看使用描述性名称的代码。

改进的代码

// Calculate the area of a rectangle
function calculateRectangleArea(width, height) {
    return width * height;
}

const rectangleWidth = 5;
const rectangleHeight = 10;
const area = calculateRectangleArea(rectangleWidth, rectangleHeight);
console.log(`Area of the rectangle: ${area}`);

这里每个变量名称都是不言自明的。因此,很容易理解代码并提高代码质量。

3.仅在需要的地方使用注释
你不需要到处写评论。只写在需要的地方,并且写得简短易懂。太多的注释会导致混乱和混乱的代码库。

评论规则

  1. 始终尝试用代码解释自己。
  2. 不要多余。
  3. 不要添加明显的噪音。
  4. 不要使用右大括号注释。
  5. 不要注释掉代码。删除即可。
  6. 用作意图解释。
  7. 用作代码说明。
  8. 用作后果警告。

例子

// Function to get the square of a number
function square(n) {
    // Multiply the number by itself
    var result = n * n; // Calculate square
    // Return the result
    return result; // Done
}

var num = 4; // Number to square
var squared = square(num); // Call function

// Output the result
console.log(squared); // Print squared number

这里我们可以看到注释用于定义步骤,通过阅读代码很容易理解。这些注释是不必要的,并且会使代码变得混乱。让我们看看注释的正确使用。

改进的代码

/**
 * Returns the square of a number.
 * @param {number} n - The number to be squared.
 * @return {number} The square of the input number.
 */
function square(n) {
    return n * n;
}

var num = 4;
var squared = square(num); // Get the square of num

console.log(squared); // Output the result

在上面的示例中,注释仅在需要时使用。这是使代码整洁的好习惯。

4。编写只做一件事的函数
当你编写函数时,不要给它们添加太多的职责。遵循单一职责原则 (SRP)。这使得该函数更容易理解并简化了为其编写单元测试。

函数规则

  1. 保持较小。
  2. 做一件事。
  3. 使用描述性名称。
  4. 希望减少争论。
  5. 将方法拆分为多个可以从客户端调用的独立方法。

例子

async function fetchDataAndProcess(url) {
    // Fetches data from an API and processes it in the same function
    try {
        const response = await fetch(url);
        const data = await response.json();

        // Process data (e.g., filter items with value greater than 10)
        const processedData = data.filter(item => item.value > 10);

        console.log(processedData);
    } catch (error) {
        console.error('Error:', error);
    }
}

// Usage
const apiUrl = 'https://api.example.com/data';
fetchDataAndProcess(apiUrl);

在上面的示例中,我们可以看到一个使用 API 获取数据并对其进行处理的函数。这可以通过另一个函数来完成。目前,数据处理功能很小,但在生产级项目中,数据处理可能会非常复杂。那时,将其保留在同一个函数中并不是一个好的做法。这将使您的代码一次性变得复杂且难以理解。
让我们看看这个的干净版本。

改进的代码

async function fetchData(url) {
    // Fetches data from an API
    try {
        const response = await fetch(url);
        return await response.json();
    } catch (error) {
        console.error('Error:', error);
        throw error;
    }
}

function processData(data) {
    // Processes the fetched data (e.g., filter items with value greater than 10)
    return data.filter(item => item.value > 10);
}

// Usage
const apiUrl = 'https://api.example.com/data';

fetchData(apiUrl)
    .then(data => {
        const processedData = processData(data);
        console.log(processedData);
    })
    .catch(error => {
        console.error('Error:', error);
    });

在此示例中,职责是分离的:fetchData 函数处理 API 调用,processData 函数处理数据处理。这使得代码更容易理解、维护和测试。

5。避免代码重复(遵循 DRY 原则 - 不要重复自己)

为了增强代码的可维护性和整洁性,尽可能创建可重用的函数或重用现有代码。例如,如果您要从 API 获取数据以在页面上显示,您将编写一个函数来检索数据并将其传递给呈现器以进行 UI 显示。如果需要在另一页上显示相同的数据,则不应再次编写相同的函数,而应将该函数移动到实用程序文件中。这允许您在两个实例中导入和使用该函数,从而提高整个代码库的可重用性和一致性。

编写简洁代码的其他一般规则

  • 遵循标准约定(对于 JavaScript Camel Case)。
  • 保持简单愚蠢。越简单总是越好。尽可能降低复杂性。
  • 童子军规则。让露营地比你发现时更干净。
  • 始终找到根本原因。始终寻找问题的根本原因。
  • 编写易于理解的代码

从今天开始实施此实践和原则来编写干净的代码。

版本聲明 本文轉載於:https://dev.to/yashrajxdev/what-is-clean-code-and-why-it-is-important-2p5d?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    如何為JavaScript對像變量創建動態鍵,嘗試為JavaScript對象創建動態鍵,使用此Syntax jsObj['key' i] = 'example' 1;將不起作用。正確的方法採用方括號:他們維持一個長度屬性,該屬性反映了數字屬性(索引)和一個數字屬性的數量。標準對像沒有模仿這...
    程式設計 發佈於2025-02-07
  • 為什麼我會得到\“ attributeError:module \'enum \'沒有屬性\'intflag \'\” python 3.6.1?
    為什麼我會得到\“ attributeError:module \'enum \'沒有屬性\'intflag \'\” python 3.6.1?
    [ attributeError:module'enum'在python 3.6.1 一個可能的原因是Enum34軟件包的存在,該軟件包提供了與Python 3.4和更早版本的兼容性。但是,在Python 3.6及以後的情況下,不再需要Enum34的實現。要驗證ENUM34是否正...
    程式設計 發佈於2025-02-07
  • 如何使用Python的記錄模塊實現自定義處理?
    如何使用Python的記錄模塊實現自定義處理?
    使用Python的Loggging Module 確保正確處理和登錄對於疑慮和維護的穩定性至關重要Python應用程序。儘管手動捕獲和記錄異常是一種可行的方法,但它可能乏味且容易出錯。 解決此問題,Python允許您覆蓋默認的異常處理機制,並將其重定向為登錄模塊。這提供了一種方便而係統的方法來捕獲...
    程式設計 發佈於2025-02-07
  • 操作員?= Java腳本
    操作員?= Java腳本
    JavaScript 的安全賦值運算符 ?=:簡化異步操作中的錯誤處理 JavaScript 引入了一個新的運算符 ?=,稱為安全賦值運算符。它旨在簡化代碼中的錯誤處理,使代碼更易於閱讀和維護,尤其是在處理 try-catch 錯誤捕獲函數時。 ?= 運算符如何工作? 使用 ?= 運算符時,它...
    程式設計 發佈於2025-02-07
  • 在保持其內容完整時,如何刪除DIV元素?
    在保持其內容完整時,如何刪除DIV元素?
    在保留其元素 display:cottents; display:cottents; cottents;在這種情況下是理想的選擇。它導致元素的孩子出現為父母的直接子女,無視元素本身。當使用CSS網格或其他應該忽略包裝元素的佈局技術時,這是有價值的。 。容器{ 顯示:Flex; } 。一 ...
    程式設計 發佈於2025-02-07
  • 在JavaScript中聲明變量時,為什麼要始終使用\“ var \”?
    在JavaScript中聲明變量時,為什麼要始終使用\“ var \”?
    考慮以下示例:您可能希望此功能返回11;但是,由於“ varaible2 = 6”上的錯別字,它返回了NAN。線。更糟糕的是,該錯別字無意間創建一個全局變量,它具有拼寫錯誤的名稱“ varaible2。因此,強烈建議使用“ var”關鍵字,即使對於全局變量,也建議始終使用“ var”關鍵字來聲明變...
    程式設計 發佈於2025-02-06
  • 如何從大熊貓的大型文本數據集中有效刪除標點符號?
    如何從大熊貓的大型文本數據集中有效刪除標點符號?
    挑戰: 這個問題在處理大型文本數據集時探索了str.replace的幾種性能替代方案: 1。 REGEX.SUB:使用預編譯的Regex模式從RE庫中使用SUB函數。此方法對str.replace進行了重大的性能改進。 2。 str.translate:利用python的str.transl...
    程式設計 發佈於2025-02-06
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。 To resolve this issue and ensure scripts execute on subsequent page visits, Firefox...
    程式設計 發佈於2025-02-06
  • 我如何設計用於存儲全球街道地址的最佳數據庫?
    我如何設計用於存儲全球街道地址的最佳數據庫?
    確定全球街道地址的最佳數據庫設計作為程序員,您會面臨設計數據庫的挑戰來自世界各地。本文探討了實現此目標的可能性,並提供了一種實用方法。 全局地址的常見數據庫結構地址line(x4) 郵政編碼 sub-building house/premise number 簡化數據輸入局部考慮[&&&&&&...
    程式設計 發佈於2025-02-06
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣?使用openssl? 答案:可以使用mcrypt數據加密數據,可以使用openssl。關於如何使用openssl對McRypt進行加密的數據: openssl_decryp...
    程式設計 發佈於2025-02-06
  • 如何在Java列表中有效計算元素的發生?
    如何在Java列表中有效計算元素的發生?
    計數列表中的元素出現在列表 中,在java編程中,列舉列表中列舉元素出現的任務來自列表。為此,收集框架提供了全面的工具套件。 在這種情況下,Batocurrences變量將保持值3,代表動物列表中的“ BAT”出現的數量。 &&& [此方法是簡單的,可以得出準確的結果,使其成為計算列表中元素出現的...
    程式設計 發佈於2025-02-06
  • 如何有效地更新實體框架5中的記錄?
    如何有效地更新實體框架5中的記錄?
    [2 優化實體框架5記錄更新 實體框架5提供了幾種更新數據庫記錄的方法。 該分析比較了三種常見方法,突出了它們的優勢和缺點,以幫助您選擇滿足需求的最佳方法。 方法1:獲取並更新單個屬性 允許對修改哪些屬性進行精確控制。 屬性排除:對於某些屬性(如密碼)不應通過此方法直接更新的方案。 多個查詢:...
    程式設計 發佈於2025-02-06
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在java中的多個返回類型:一個誤解介紹,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但是,情況確實如此嗎? 通用方法:拆開神秘 [方法僅具有單一的返回類型。相反,它採用機制,如鑽石符號“ ”。 分解方法簽名: :本節定義了一個通用類型參數,E。它表示該方法接受了擴展foo類...
    程式設計 發佈於2025-02-06
  • 我可以在CSS中使用SVG作為偽元素嗎?
    我可以在CSS中使用SVG作為偽元素嗎?
    使用svgs用作pseudo-element content css content properts允許在使用元素之前或之後使用元素插入各種類型的內容偽元素,例如::之前和::之後。但是,對可以包括哪些內容有限制。 可以將svgs用作pseudo-element Content? ,現在可以使...
    程式設計 發佈於2025-02-06
  • 在沒有密碼提示的情況下,如何在Ubuntu上安裝MySQL?
    在沒有密碼提示的情況下,如何在Ubuntu上安裝MySQL?
    在ubuntu 使用debconf-set-selections sudo debconf-set-selections
    程式設計 發佈於2025-02-06

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

Copyright© 2022 湘ICP备2022001581号-3