首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

變數命名精準化指南:消除歧義、布林語義、符合預期三大原則

     編輯:Java 相關知識

「命名是程式設計中最難的兩件事之一」(另一件是快取失效與 off-by-one 錯誤)。本文從消除歧義、布林值語義精準、符合使用者預期三大維度,透過反面教材與最佳實踐對比,教你寫出「一眼看懂、不敢誤用」的變數名。

一、消除歧義:持續追問「別人還能怎麼理解?」

反例:filter()


results = Database.allObjects.filter("year <= 2011");

歧義:filter 既可理解為「保留符合條件的」,也可理解為「過濾掉符合條件的」。

修正:

  • 保留 → select、keep、where
  • 移除 → exclude、remove、discard

更多歧義詞對照表

二、布林值命名:讓 true/false 語義零歧義

反例:readPassword = true

兩種解讀:

  1. 「需要讀取密碼」(狀態)
  2. 「密碼已讀取完成」(動作完成標記)

修正:

  • 需讀取 → needPassword、requiresAuthentication
  • 已讀取 → passwordRead、userAuthenticated

黃金前綴規則

為布林變數/方法統一加上語義前綴:

歧義詞可能誤解建議替換
check檢查/核對 vs 勾選verify / validate / tick
process處理/加工 vs 過程handle / execute / transform
run運行/執行 vs 管理execute / start / operate
get獲取/取回 vs 計算/轉換fetch / retrieve / compute / convert

反例:disableSsl = false

雙重否定極易誤讀。「禁用 SSL 為假」=「啟用 SSL 為真」。

修正:useSsl = true(肯定語義,直觀明確)。

三、符合使用者預期:不要違背慣用語

反例:getMean() 執行昂貴計算


public double getMean() {
    // 遍歷所有樣本計算平均值 → O(n) 昂貴操作
    return total / count;
}

違背預期:慣例 getXxx() 為輕量級存取器(O(1))。呼叫者假設廉價,高頻調用導致效能災難。

修正:

  • 改名 → computeMean()、calculateMean()(暗示計算成本)。
  • 或優化實現 → 快取平均值,變更時增量更新,真正做到 O(1) getMean()。

反例:list.size() 在 LinkedList 是 O(n)

C++ STL std::list::size() (C++11 前) 為 O(n),違背「所有容器 size() 為 O(1)」的強烈預期,導致 while (list.size() > max) ... 變成 O(n²) 災難。

修正:改名 countElements() 或文檔醒目標註複雜度。(C++11 已強制 size() 為 O(1))。

四、綜合命名檢查清單

[ ] 是否有歧義?換個角度讀會不會誤解?
[ ] 布林值是否有 is/has/can/should/need 前綴?
[ ] 是否使用雙重否定(disableX = false)?
[ ] 是否違背 get/set/size/contains 等慣用語語義?
[ ] 縮寫是否為團隊共識?(避免單人懂的縮寫)
[ ] 名稱長度是否匹配作用域?(區域變數短、公共 API 長)
[ ] 是否使用領域術語而非技術術語?(userId 而非 uid)

結語

好的命名是給未來的自己、給團隊同事、給維護者的文檔。每多花 10 秒思考命名,就能省下 10 分鐘的除錯與溝通成本。從今天開始,把「別人會怎麼誤解?」當作命名的試金石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
前綴語義範例
is狀態/屬性判斷isEmpty, isValid, isEnabled
has擁有/包含hasChildren, hasPermission
can能力/權限canEdit, canAccess
should建議/預期行為shouldRetry, shouldRefresh
need需求/必要條件needLogin, needUpdate