iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

參考書籍:代码整洁之道

命名規則


  1. 變數和函數命名:
    • 使用描述性名稱,避免使用簡短或含糊的名稱。
    • 函數名應該表明其行為,例如 calculateTotalPrice 比 calc 更具描述性。
    • 使用駝峰命名法(camelCase)來命名變數和函數。
    // 不推薦的命名
    let x = 10;
    function f() {
      // ...
    }
    
    // 推薦的命名
    let itemCount = 10;
    function calculateTotalPrice(items) {
      // ...
    }
    
  2. 常量命名:使用全大寫加下劃線(UPPER_CASE)來表示常量。
    const MAX_RETRIES = 5;
    

函數設計


  1. 單一職責原則:每個函數應該只做一件事,並且做好。

    // 不推薦:一個函數完成多個任務
    function processOrder(order) {
      validateOrder(order);
      calculateTotal(order);
      sendConfirmationEmail(order);
    }
    
    // 推薦:每個函數專注於單一任務
    function validateOrder(order) {
      // ...
    }
    
    function calculateTotal(order) {
      // ...
    }
    
    function sendConfirmationEmail(order) {
      // ...
    }
    
  2. 避免副作用:函數應該儘量避免修改外部狀態。

    // 不推薦:有副作用
    function updateItem(item) {
      item.price = 100; // 修改外部對象
    }
    
    // 推薦:無副作用
    function getUpdatedItem(item) {
      return { ...item, price: 100 }; // 返回新對象
    }
    
  3. 參數數量:函數的參數數量應該盡量少,最好不超過三個。可以使用對象作為參數來組合多個值。

    // 不推薦:多個參數
    function createUser(name, age, email, password) {
      // ...
    }
    
    // 推薦:使用對象
    function createUser({ name, age, email, password }) {
      // ...
    }
    

代碼結構和可讀性


  1. 代碼縮進:使用一致的縮進風格(如兩個或四個空格),以提高可讀性。
  2. 避免深層嵌套:使用早期返回來避免深層嵌套的條件語句。
    // 不推薦:深層嵌套
    function processOrder(order) {
      if (order) {
        if (order.items) {
          if (order.items.length > 0) {
            // 處理訂單
          }
        }
      }
    }
    
    // 推薦:早期返回
    function processOrder(order) {
      if (!order || !order.items || order.items.length === 0) {
        return;
      }
      // 處理訂單
    }
    

錯誤處理


  1. 使用 try...catch:合理使用 try...catch 來處理異常,確保代碼健壯性。

    try {
      // 可能會引發錯誤的代碼
      let result = someFunction();
    } catch (error) {
      console.error('Error occurred:', error);
    }
    
  2. 錯誤信息:

    function divide(a, b) {
      if (b === 0) {
        throw new Error('Division by zero is not allowed');
      }
      return a / b;
    }
    

文檔和註釋


  1. 文檔化代碼:使用註釋和文檔來解釋代碼的目的和用法,過於複雜的邏輯應加以說明。
    /**
     * 計算訂單的總價格
     * @param {Object[]} items - 訂單中的項目
     * @returns {number} 總價格
     */
    function calculateTotalPrice(items) {
      return items.reduce((total, item) => total + item.price, 0);
    }
    
  2. 避免多餘的註釋:註釋應補充代碼中未包含的信息,而不是重複代碼的內容。

上一篇
第 24 天:前端與後端的基本通信
下一篇
第 26 天:安全最佳實踐
系列文
30天 JavaScript 提升計畫:從零到精通結合2024年的創新功能30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言