首頁  >  文章  >  web前端  >  了解乾淨的程式碼:函數 ⚡

了解乾淨的程式碼:函數 ⚡

WBOY
WBOY原創
2024-08-16 06:11:36589瀏覽

Understanding Clean Code: Functions ⚡

在軟體開發中,函數是任何應用程式的構建塊。它們是我們建構邏輯、封裝行為以及將複雜任務劃分為可管理部分的主要方式。

然而,並非所有函數都是一樣的。在《整潔程式碼》的第 3 章中,重點在於寫小任務、重點突出並做好一件事。

在本文中,我們將深入研究這些原則並探索如何在 JavaScript 中應用它們。


?1.小功能:少即是多

乾淨程式碼的一個核心原則是函數應該很小。

但是在這種情況下「小」代表什麼?作者主張函數通常只有幾行長。

這個想法是小函數更容易理解、測試和維護。

讓我們來看一個 JavaScript 範例:

// Bad Example: A large, unfocused function
function processOrder(order) {
    applyDiscount(order);
    calculateShipping(order);
    calculateTax(order);
    generateInvoice(order);
    sendConfirmationEmail(order);
    updateInventory(order);
}

這個函數雖然看似簡單,但作用太多。這些任務中的每一個都可以而且應該分解為自己的功能。

// Good Example: Small, focused functions
function processOrder(order) {
    applyDiscount(order);
    calculateShipping(order);
    calculateTax(order);
    generateInvoice(order);
    sendConfirmationEmail(order);
    updateInventory(order);
}

function applyDiscount(order) {
    // Discount logic
}

function calculateShipping(order) {
    // Shipping calculation logic
}

function calculateTax(order) {
    // Tax calculation logic
}

function generateInvoice(order) {
    // Invoice generation logic
}

function sendConfirmationEmail(order) {
    // Email sending logic
}

function updateInventory(order) {
    // Inventory update logic
}

在修改後的範例中,每個函數只做一件事情,使程式碼更易於閱讀和維護。

processOrder 函數現在充當高階協調器,而更小、更集中的函數則處理細節。


?2.做一件事

一個函數應該要做一件事並且把它做好。如果您發現自己正在編寫執行多個任務的函數,則表示您應該將其重構為更小的函數。

這是一個例子:

// Bad Example: A function doing multiple things
function formatAndSendEmail(email, subject, message) {
    const formattedMessage = `<html><body>${message}</body></html>`;
    sendEmail(email, subject, formattedMessage);
}

雖然這個函數看起來很簡潔,但它做了兩件事:格式化訊息和發送電子郵件。相反,將其分解:

// Good Example: Functions doing one thing
function formatMessage(message) {
    return `<html><body>${message}</body></html>`;
}

function sendFormattedEmail(email, subject, message) {
    const formattedMessage = formatMessage(message);
    sendEmail(email, subject, formattedMessage);
}

現在,每個函數都有一個職責,這使得程式碼更易於測試和重複使用。

formatMessage 函數可以獨立於電子郵件傳送邏輯進行測試。


?3.避免副作用

函數應該最大限度地減少副作用,這意味著它們不應該以意想不到的方式改變系統的狀態。有副作用的函數可能更難調試和推理。

這是一個例子:

// Bad Example: A function with a side effect
let globalCounter = 0;

function incrementCounter() {
    globalCounter++;
}

incrementCounter 函數會變更全域狀態,如果不仔細管理,可能會導致錯誤。

更好的方法是傳回一個新值並讓呼叫者決定如何處理它:

// Good Example: Avoiding side effects
function incrementCounter(counter) {
    return counter + 1;
}

globalCounter = incrementCounter(globalCounter);

透過避免副作用,您可以讓您的函數更加可預測且更易於使用。


?4.單一抽象級別

函數應該在單一抽象層級上運行。在同一函數中混合不同層級的細節可能會使其更難以理解。

例如:

// Bad Example: Mixed levels of abstraction
function getUserData(userId) {
    const user = database.fetchUserById(userId); // Low-level
    return `${user.firstName} ${user.lastName} (${user.email})`; // High-level
}

這裡,該函數將低階資料庫取得與使用者資料的高階格式化混合在一起。

最好將這些問題分開:

// Good Example: Single level of abstraction
function getUser(userId) {
    return database.fetchUserById(userId);
}

function formatUserData(user) {
    return `${user.firstName} ${user.lastName} (${user.email})`;
}

const user = getUser(userId);
const formattedUserData = formatUserData(user);

現在,每個函數都在單一抽象層級上運行,使程式碼更清晰且更易於維護。


結論⚡

編寫乾淨的函數是編寫可維護程式碼的基石。

透過保持函數較小、確保它們只做一件事、避免副作用以及維護單一抽象級別,您可以創建更易於閱讀、理解和維護的程式碼。

當您繼續磨練 JavaScript 技能時,請牢記乾淨程式碼中的這些原則,以編寫真正體現簡單性和清晰性藝術的函數。

以上是了解乾淨的程式碼:函數 ⚡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn