前言

关于代码命名,我相信是经常困扰很多小伙伴的一个问题,尤其是对于强迫症晚期患者。怎么说呢,每次小编在写代码之前,总会在想啊想啊,用什么命名法好呢?对于经常在C++、Java、Python等主流语言上切换的强迫症来说,换个语言换种命名风格简直不要太混乱。

今天就来梳理一下常见的代码命名规范以及适用范围吧。

常见命名规范

为什么需要命名规范呢?世界级软件大师 Martin Fowler 大神都说过 CS 领域有两大最难的事情,一是缓存失效,一是程序命名。

《Clean Code》这本书明确指出:

代码的注释不是越详细越好。实际上好的代码本身就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释。若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。

要想让你的编程语言足够有表达力,良好的命名规范是必不可少的。同时,花几分钟学学规范的命名,也能让你的代码看起来赏心悦目,何乐而不为呢。

1. 驼峰命名法(CamelCase)

骆驼式命名法(Camel-Case)又称驼峰式命名法,是电脑程式编写时的一套命名规则(惯例)。正如它的名称CamelCase所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。程序员们为了自己的代码能更容易的在同行之间交流,所以多采取统一的可读性比较好的命名方式。

它又可以分为以下几种。

(1) 小驼峰命名法(lowerCamelCase)

除第一个单词之外,其他单词首字母大写。方法名、参数名、成员变量、局部变量需要使用小驼峰命名法(lowerCamelCase)。比如:

getUserInfo()
createCustomThreadPool()
findAllByUserName(String userName)
TaskRepository taskRepository;

(2) 大驼峰命名法(CamelCase)

相比小驼峰法,大驼峰法(即帕斯卡命名法)把第一个单词的首字母也大写了。常用于类名,命名空间等。如:

class TaskDateToSend{}
class TaskLabelToSend{}
SettingRepository

2. 蛇形命名法(snake_case)

蛇形法是全由小写字母和下划线组成,在两个单词之间用下滑线连接即可。测试方法名、常量、枚举名称需要使用蛇形命名法(snake_case)。如:

first_name
last_name
MAX_ITERATION
LAST_DATA

3. 串式命名法(kebab-case)

在串式命名法中,各个单词之间通过下划线“-”连接,比如:

hello-world
first-project

建议项目文件夹名称使用串式命名法(kebab-case),比如 dubbo 项目的各个模块的命名是下面这样的:

总结一下

语言场景

给出各个场景下的命名规则,大家要养成习惯。事实上,如果经常在各个语言上切换的话,真的可能搞混。所以今天就Mark一下吧。

Java命名规范

总体命名规范

  • 类名需要使用大驼峰命名法(UpperCamelCase)风格。
  • 方法名、参数名、成员变量、局部变量需要使用小驼峰命名法(lowerCamelCase)。
  • 测试方法名、常量、枚举名称需要使用蛇形命名法(snake_case) ,比如test_get_user()、TIME_LIMIT。并且,测试方法名称要求全部小写,常量以及枚举名称需要全部大写。
  • 项目文件夹名称使用串式命名法(kebab-case),比如dubbo-registry。
  • 包名统一使用小写,尽量使用单个名词作为包名,各个单词通过 “.” 分隔符连接,并且各个单词必须为单数。
  • 抽象类命名使用 Abstract 开头。如:public abstract class AbstractClient extends AbstractEndpoint{}。
  • 异常类命名使用 Exception 结尾。如:public class NoSuchMethodException extends RuntimeException{}。
  • 测试类命名以它要测试的类的名称开始,以 Test 结尾。如:public class AnnotationUtilsTest{}。

包名命名规范

Java的包名由小写单词组成,包的路径符合所开发的系统模块的定义,以便通过包名可得知其属于哪个模块,从而方便到对应包里找相应的实现类。
1. 常规包名
为了保障每个Java Package命名的唯一性,在Java编程规范中要求开发人员在自己定义的包名前加上唯一的前缀.由于互联网上的域名称是不会重复的,所以多数开发人员采用自己公司在互联网上的域名称作为自己程序包的唯一前缀.例如 : com.sun.swt…

  • 公司项目
    com : 公司项目,copyright由项目发起的公司所有.
    包名 : com.公司名.项目名.模块名…
  • 团队项目
    team : 团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有.
    包名 : team.团队名.项目名.模块名…

2. 自定义包名
一般公司命名为com.公司名.项目名.模块名…那我们个人的项目又怎么命名呢?个人的英语单词有individual、personal、private、one-man,进一步对以上四个单词词意进行分析并在保证了唯一性,继而使用每个单词的前4个字母作为前缀,与com也做了区分.示例如下所示:

  • indi : 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者. 包名 :indi.发起者名.项目名.模块名…
  • pers : 个人项目,指个人发起,独自完成,可分享的项目,copyright主要属于个人.包名 : pers.个人名.项目名.模块名…
  • priv : 私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人.包名 : priv.个人名.项目名.模块名…
  • onem : 与indi相同,推荐使用indi.

Python命名规范

:总是使用首字母大写单词串。如MyClass、ClassName。内部类可以使用额外的前导下划线。

函数和方法:小写+下划线,如method_name。

函数参数:小写+下划线,如function_parameter_name。如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线,如random_。

全局变量:对于from M import *导入语句,如果想阻止导入模块内的全局变量可以使用旧有的规范,在全局变量上加一个前导的下划线,如_var_name。应避免使用全局变量

变量:小写,由下划线连接各个单词。如color、this_is_a_variable。
注意

  1. 不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。
  2. 私有类成员使用单一下划线前缀标识。
  3. 变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。

常量:常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOW,TOTAL。

异常:以“Error”作为后缀。

文件名:全小写,可使用下划线

:应该是简短的、小写的名字。如果下划线可以改善可读性可以加入,如mypackage。

模块:与包的规范同,如mymodule。

缩写:命名应当尽量使用全拼写的单词,缩写的情况有如下两种:

  1. 常用的缩写,如XML、ID等,在命名时也应只大写首字母,如XmlParser。
  2. 命名中含有长单词,对某个单词进行缩写。这时应使用约定成俗的缩写方式。
    例如:
    function 缩写为 fn
    text 缩写为 txt
    object 缩写为 obj
    count 缩写为 cnt
    number 缩写为 num,等。

前导后缀下划线
一个前导下划线:表示非公有。
一个后缀下划线:避免关键字冲突。
两个前导下划线:当命名一个类属性引起名称冲突时使用。
两个前导和后缀下划线:“魔”(有特殊用图)对象或者属性,例如__init__或者__file__。绝对不要创造这样的名字,而只是使用它们。
注意:关于下划线的使用存在一些争议。

特定命名方式:主要是指 xxx 形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。如
class Base(object):
def init(self, id, parent = None):
self.id = id
self.parent = parent
def message(self, msgid):
其中 idparentmessage 都采用了系统保留字命名法。

Python推荐使用蛇形命名法,因为 Python 是蟒蛇啊,理所当然是用蛇形命名……

综合各方面考虑,驼峰式命名法比较好,优势明显,事实上,目前使用驼峰式命名法的人也真的越来越多了。

reference

  • 三种编程命名规则:驼峰命名法 (壹)
  • 因为命名被主管diss无数次。简单聊聊编程最头疼的事情之一:命名
  • Java 命名规范
  • Python 为什么推荐蛇形命名法?

10分钟了解代码命名规范(Java、Python)相关推荐

  1. 代码命名规范是一种责任也是一种精神(工匠精神)

    代码命名规范之美 规范概述 命名规范 管理类命名 Bootstrap Processor Manager Holder Factory Provider Registrar Engine Servic ...

  2. cpe(通用平台枚举)命名规范及python CPE库实战

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  3. 【C语言】代码命名规范

    [C语言]代码命名规范 #ifndef _MSG_H_ #define _MSG_H_typedef struct msg_s {uint8_t msgType;uint8_t msgId;uint8 ...

  4. python代码命名规范

    目录 一.常用命名规范 1.1.驼峰命名法(CamelCase) 1.1.1.小驼峰命名法(lowerCamelCase) 1.1.2.大驼峰命名法(CamelCase) 1.2.蛇形命名法(snak ...

  5. Android 代码命名规范 -- 提高代码可以读性

    项目是团队分工合作,代码可读性非常重要,在开发过程中,命名规范统一尤为重要,最好是团队中统一好大家命名方法,这样对于日后的工作会轻松很多. 在面试的时候,审核一个程序员的编程水平的时候,命名规范也是一 ...

  6. 百度android代码命名规范

    代码规范 1.     简介 A.    目的 本文提供一整套编写高效可靠的 Java 代码的标准.约定和指南.它们以安全可靠的软件工程原则为基础,使代码易于理解.维护和增强.而且,通过遵循这些程序设 ...

  7. Android代码命名规范

    目录 目录 1.为什么 规范 Android 代码命名? 2.Android需要命名的代码(对象)有哪些? 3.具体命名规范 3.1.包 3.2.类 3.3.变量 3.4.方法 3.5.参数名 3.6 ...

  8. python的spider程序下载_PHPspider爬虫10分钟快速教程(内附python教程分享)

    说到做爬虫,大家都可能第一时间想到的是python,其实php也是可以用来写爬虫程序的.php一贯简洁.易用,亲测使用PHPspider框架10分钟就能写出一个简单的爬虫程序. 一.PHP环境安装 和 ...

  9. FPGA知识汇集-值得收藏的FPGA代码命名规范?

    命名规范 随者FPGA设计的日益复杂,设计实践.方法和流程逐渐成为重要的成功因素.良好的设计能有效影响FPGA设计的性能和逻辑利用,使系统可靠性显著提高,产品可以更快投入到市场.相反,不良的设计可能会 ...

最新文章

  1. ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]
  2. 事务管理最佳实践全面解析
  3. 【数字图像处理】直方图均衡化
  4. C# webkit内核 网页填表
  5. 前端学习(494):在XHTML中得用法
  6. 空间注意力机制sam_Attention注意力机制介绍
  7. 浅谈JavaScript中的apply、call和bind
  8. 搜索引擎登录工具_“搜索引擎营销”有多重要!你知道吗?
  9. 手把手!基于领域预训练和对比学习SimCSE的语义检索(附源码)
  10. 如何着手分析一个行业?
  11. apollocaffe编译问题
  12. Ubuntu构建ARM交叉编译器
  13. linux安装无头浏览器
  14. 腾讯云TDSQL-C云原生数据库技术
  15. Java课程寒假之开发记账本软件(Android版)之一
  16. 使用java发送qq邮件注意问题
  17. EDAS系统上传稿件The font Arial-ItalicMT is not embedbed in the fille.(FAQ 109)解决
  18. 利用ArcGIS创建注记层制作方法及注意事项
  19. 第1章 数据库系统绪论
  20. 数据库上机实验三(游标)

热门文章

  1. 扰动观测器(DOB)设计
  2. 20081014观《余世维-如何成为一个成功的职业经理人》体会之一
  3. 微信摇一摇功能的实现
  4. 常用数据分析模型:盈亏平衡分析——收益分析
  5. Python(matplotlib)海洋温度垂直剖面图(附完整代码)
  6. 微信公众号客服 简单实现
  7. 修改Mysql57的root密码
  8. hadoop基础一:Hadoop简介、安装
  9. Mysql中的delimiter
  10. 蜂鸟数据Trochil:理想的基于模型的策略开发-构建更好的策略3