軟件編程命名規范

編程命名規范是保證代碼可讀性、可維護性和團隊協作效率的重要基礎。以下是涵蓋主流編程語言的通用命名規范,結合行業最佳實踐和常見規范(如Google、Microsoft、Airbnb等風格指南):


一、通用命名原則

  1. 清晰優先:名稱應準確描述變量/函數的用途(如 calculateTotalPrice() 優于 calc()
  2. 一致性:整個項目保持相同命名風格(如全用 camelCase 或全用 snake_case
  3. 避免誤導
    • 布爾變量用 is/has 開頭(如 isLoggedIn
    • 不使用類型前綴(如 strName 已過時)

二、常見命名風格

風格格式示例適用場景
camelCaseuserAccountJava/JavaScript/Go變量/函數
PascalCaseUserAccountC#/Java類名、TypeScript類型
snake_caseuser_accountPython/Ruby/SQL字段名
kebab-caseuser-accountCSS類名/URL路徑
UPPER_SNAKEMAX_SIZE常量/枚舉值

三、具體場景規范

1. 變量命名
  • 普通變量
    // Good
    let orderCount = 5;
    const MAX_ITEMS = 100;// Bad
    let oc = 5; // 縮寫不明確
    
  • 集合類型
    # Good
    users_list = []  # 列表
    permissions_dict = {}  # 字典# Bad
    users = []  # 無法區分是單個還是集合
    
2. 函數/方法命名
  • 動作導向:動詞+名詞
    // Good
    public void sendEmail() {...}
    private String parseJson() {...}// Bad
    public void email() {...} // 缺少動作描述
    
  • 布爾返回:使用 is/has/can 前綴
    function isValidUser(user) {...}
    
3. 類與接口
  • 類名:名詞或名詞短語(PascalCase)
    // Good
    class PaymentProcessor {...}// Bad
    class processPayment {...} // 類不是動作
    
  • 接口
    • C#/Java:I 前綴(如 IEnumerable
    • TypeScript:無前綴(如 Logger
4. 文件與目錄
  • 命名規則
    • 組件文件:PascalCase(React/Vue)
      /components/UserProfile.vue
      
    • 工具類:kebab-case
      /utils/date-format.js
      
  • 測試文件
    /tests/user-service.spec.ts  # 單元測試
    /e2e/login.test.js          # 端到端測試
    

四、語言特例

1. JavaScript/TypeScript
  • 私有成員
    class User {private _internalId: string; // 下劃線前綴(非強制)
    }
    
  • 事件處理
    // Good
    function handleClick() {...}
    <button onClick={handleClick} />
    
2. Python
  • 模塊命名:全小寫+下劃線
    # Good
    import data_processor# Bad
    import DataProcessor
    
  • 保護成員:單下劃線前綴
    def _internal_method(): ...
    
3. SQL
  • 表與字段
    -- Good
    CREATE TABLE user_account (id BIGINT PRIMARY KEY,created_at TIMESTAMP
    );-- Bad
    CREATE TABLE UserAccount (...) -- 數據庫通常大小寫不敏感
    

五、特殊場景處理

1. 縮寫規范
  • 規則
    • 常用縮寫全大寫(如 XML/HTTP
    • 非常用縮寫首字母大寫(如 parseXml()
  • 示例
    // Good
    class HtmlParser {...}
    String apiUrl;// Bad
    class HTMLParser {...}  // 不一致
    
2. 重命名沖突
  • 解決方案
    // 添加上下文修飾
    string customerName;  // 代替 name
    DateTime orderDate;   // 代替 date
    
3. 測試命名
  • 模板[UnitOfWork]_[Scenario]_[ExpectedResult]
    describe('UserService', () => {it('login_withInvalidCredential_returnsFalse', () => {...});
    });
    

六、工具與自動化

1. 靜態檢查工具
語言工具規則集示例
JavaScriptESLintairbnb-base
Pythonflake8pep8-naming
JavaCheckstyleGoogleChecks
2. IDE 配置
  • VS Code:安裝 EditorConfig 插件統一縮進/換行
    # .editorconfig
    [*.js]
    indent_style = space
    indent_size = 2
    
3. 自動格式化
# Prettier 示例
prettier --write "src/**/*.js"# Python black
black .

七、命名禁忌

  1. 避免單字母名(除循環變量 i/j/k
  2. 禁用拼音混合(如 shangpinList
  3. 勿用保留字(如 classint
  4. 禁止特殊字符(如 user@name

八、團隊協作建議

  1. 制定規范文檔:示例:
    ## 本項目命名規則
    - React組件:`PascalCase`
    - CSS類名:`BEM` 風格(.block__element--modifier)
    
  2. 代碼審查:重點關注新人首次提交的命名
  3. 漸進式改進:使用工具自動修復歷史代碼

通過遵循這些規范,可顯著提升代碼的可讀性和維護性。建議結合項目實際情況調整,并在團隊內通過 git hooks 強制規范檢查。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78628.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78628.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

換張電話卡能改變IP屬地嗎?一文解讀

在互聯網時代&#xff0c;IP屬地&#xff08;即網絡定位信息&#xff09;的顯示引發了許多用戶的關注。有人好奇&#xff1a;更換電話卡&#xff08;SIM卡&#xff09;是否能改變自己的IP屬地&#xff1f;本文將解析IP屬地的定義、電話卡的作用&#xff0c;并深入探討兩者之間的…

前端:純HTML、CSS和JS菜單樣式

實現了一個多級折疊菜單系統,使用純HTML、CSS和JavaScript(無任何框架) 一、二級菜單展開 1、實現效果 初始狀態-展示全部一級菜單 選中共狀態,一級標題選中共為藍色背景色,二級標題選中共為藍色文字,展開右側圖標為-,后縮狀態右側圖標為+ 2、實現 ??HTML結構?? …

Centos8 安裝 Docker

yum 更換國內源 1. 備份原 yum 配置 cd /etc/yum.repos.d/ mkdir backup mv *.repo backup/2. 下載新 yum 配置&#xff08;阿里源&#xff09; wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo3. 替換源中的系統版本變量 sed -…

AI測試工具Testim——告別自動化測試維護難題

隨著人工智能技術的快速發展&#xff0c;AI測試工具正在成為提升軟件研發效能的關鍵。每款AI的特性各有差異&#xff0c;今天&#xff0c;我們就給大家介紹一款專注于Web和移動應用的端到端的AI測試工具--Testim。 Testim的簡介 官網地址&#xff1a;https://www.testim.io/ 簡…

【默子AI】萬字長文:MCP與A2A協議詳解

【默子AI】萬字長文&#xff1a;MCP與A2A協議詳解 引言&#xff1a; 讓一個大模型憑空解決所有問題&#xff0c;就像讓一個書呆子不借助工具就去修汽車 即便他腦子里裝滿了理論知識&#xff0c;也缺少實踐的“手腳”。 長期以來&#xff0c;AI助手&#xff08;尤其是LLM&#x…

LeNet5 神經網絡的參數解析和圖片尺寸解析

1.LeNet-5 神經網絡 以下是針對 LeNet-5 神經網絡的詳細參數解析和圖片尺寸變化分析&#xff0c;和原始論文設計&#xff0c;通過分步計算說明各層的張量變換過程。 經典的 LeNet-5架構簡化版&#xff08;原始論文輸入為 32x32&#xff0c;MNIST 常用 28x28 需調整&#xff09…

第二節:文件系統

理論知識 文件系統的基本概念&#xff1a;文件系統是操作系統中負責管理持久數據的子系統&#xff0c;它將數據組織成文件和目錄的形式&#xff0c;方便用戶存儲和訪問數據。Linux文件系統的類型&#xff1a;常見的 Linux 文件系統類型有 Ext2、Ext3、Ext4、XFS、Btrfs 等。Ex…

Python數據結構與算法(5)——動態規劃

Python數據結構與算法(5)——動態規劃 0. 學習目標1. 動態規劃的基本概念1.1 什么是動態規劃1.2 動態規劃的核心思想1.3 動態規劃的適用條件2. 動態規劃的實現思路2.1 自頂向下:備忘錄法 (Memoization)2.2 自底向上:表格法(Tabulation)3. 0/1 背包問題4. 最長公共子序列5…

【JAVA ee初階】多線程(3)

一、出現線程安全的原因 1.【根本原因】線程的調度執行時隨機的&#xff08;搶占式執行&#xff09;->罪魁禍首 2.多個線程同時修改同一個變量 如果是一個線程修改一個變量 或者 多個線程讀取同一個變量 或者 多個線程修改不同變量 這些都沒事。 3.修改操作不是原子的&a…

Halcon 3D 表面匹配基于形狀

文章目錄 prepare_object_model_3d 準備 3D 物體模型read_shape_model_3d — 讀取3D匹配模型create_shape_model_3d 準備要匹配的3D模型find_shape_model_3d ——發現匹配模型project_shape_model_3d 將三維形狀模型的邊緣投影到圖像坐標中。示例ignore_part_polarity&#xff…

【Linux】Java 開發者的 Linux 常用命令指南

Java 開發者的 Linux 常用命令指南 目錄標題 Java 開發者的 Linux 常用命令指南1. Linux 目錄結構2. 系統信息命令3. 服務管理系統服務防火墻管理 4. 文本編輯 (vi/vim)常用模式 5. 文件和目錄操作查看與導航創建與刪除查看文件內容查找文件 6. 用戶管理7. 壓縮和解壓8. 權限管…

每日c/c++題 備戰藍橋杯(P1252洛谷 馬拉松接力賽)

洛谷P1060 馬拉松接力賽題解&#xff1a;貪心算法在資源分配中的巧妙應用 題目描述 P1060 馬拉松接力賽是一道結合貪心策略與動態規劃思想的資源分配問題。題目要求將25公里的馬拉松接力賽合理分配給5名選手&#xff0c;使得總耗時最短。每位選手可跑1-10公里的整數距離&…

Nginx 中間件

Nginx&#xff08;發音為 "engine-x"&#xff09;是一款開源的高性能 HTTP 服務器和反向代理服務器&#xff0c;最初由 Igor Sysoev 開發。 它以其高性能、穩定性、豐富的功能集和低資源消耗而聞名&#xff0c;廣泛應用于全球的 Web 服務架構中。 作為中間件&#…

Neo4j在win下安裝教程(docker環境)

1. 安裝命令 1.1 基于正式neo4j安裝–不用 docker run --name neo4j-container -p 7474:7474 -p 7687:7687 -d neo4j1.2 基于community安裝 需要部署兩個Neo4j&#xff0c;一個正式庫prod&#xff0c;一個測試庫dev。 neo4j默認監聽7474&#xff08;HTTP-也就是瀏覽器端口&…

kylin v10 + argo + ascend 310p多機多卡 pytorch distributed 訓練

最近接了個模型訓練編排多機多卡的改造需求&#xff0c;要求使用argo dag task啟動多個節點&#xff0c;同時多個節點能實現 torch.distributed.launch 這樣多機多卡的訓練模式 簡述技術 torch.distributed.launch命令介紹 我們在訓練分布式時候&#xff0c;會使用到 torch.d…

[Mac] 使用homebrew安裝miniconda

使用虛擬環境可以對不同項目的依賴進行隔離。可以使用venv或者conda來創建和使用虛擬環境。 venv是Python內置的虛擬環境管理模塊&#xff0c;適合純Python項目以及快速輕量級的開發和部署。conda具備更強大的版本管理能力&#xff0c;但是占用較大的磁盤空間。 考慮到我基本不…

CMU-15445(1)——環境搭建

前言 最近在找完暑期實習之后&#xff0c;終于有了一些干項目外的空余時間學習新的知識&#xff0c;在這么多輪面試中&#xff0c;數據庫的考察非常多&#xff0c;但孱弱的數據庫基礎導致我有很多次面試被問住&#xff0c;因此我希望在學習CMU-15445&#xff08;Fall 2024&…

CSS元素動畫篇:基于當前位置的變換動畫(四)

基于當前位置的變換動畫&#xff08;四&#xff09; 前言透明效果類元素動畫閃爍動畫效果效果預覽代碼實現 淡入動畫效果效果預覽代碼實現 淡出動畫效果效果預覽代碼實現 結語 前言 CSS元素動畫一般分為兩種&#xff1a;一種是元素基于當前位置的變換動畫&#xff0c;通過不明…

STM32驅動AD5318配置8通道DA詳細講解

目錄 1. AD5318 芯片特性 2、AD5318寄存器概述 3、SPI數據幀格式 3.1 控制位(Bit15) 3.2 地址位(Bit14-Bit12,3 位) 3.3 數據 / 控制碼(Bit11-Bit0) 4、控制功能寄存器(控制位 = 1 時激活) 4.1 參考與增益配置(MM = 00) 4.2. LDAC模式(MM = 01) 4.3 掉…

如何搭建spark yarn 模式的集群集群

以下是搭建Spark YARN模式集群的一般步驟&#xff1a; 準備工作 - 確保集群中各節點安裝了Java環境&#xff0c;并配置好 JAVA_HOME 環境變量。 - 各節點間能通過SSH免密登錄。 - 安裝并配置好Hadoop集群&#xff0c;YARN作為Hadoop的資源管理器&#xff0c;Spark YARN模式需要…