软件编程命名规范

编程命名规范是保证代码可读性、可维护性和团队协作效率的重要基础。以下是涵盖主流编程语言的通用命名规范,结合行业最佳实践和常见规范(如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.mzph.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模式需要…