程序猿声
代码黑科技的分享区
前言关于代码命名,我相信是经常困扰很多小伙伴的一个问题,尤其是对于强迫症晚期患者。怎么说呢,每次小编在写代码之前,总会在想啊想啊,用什么命名法好呢?对于经常在C++、Java、Python等主流语言上切换的强迫症来说,换个语言换种命名风格简直不要太混乱。
今天就来梳理一下常见的代码命名规范以及适用范围吧。
常见命名规范为什么需要命名规范呢?世界级软件大师 Martin Fowler 大神都说过 CS 领域有两大最难的事情,一是缓存失效,一是程序命名。
《Clean Code》这本书明确指出:
代码的注释不是越详细越好。实际上好的代码本身就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释。若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。
要想让你的编程语言足够有表达力,良好的命名规范是必不可少的。同时,花几分钟学学规范的命名,也能让你的代码看起来赏心悦目,何乐而不为呢。
骆驼式命名法(Camel-Case)又称驼峰式命名法,是电脑程式编写时的一套命名规则(惯例)。正如它的名称CamelCase所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。程序员们为了自己的代码能更容易的在同行之间交流,所以多采取统一的可读性比较好的命名方式。
它又可以分为以下几种。
除第一个单词之外,其他单词首字母大写。方法名、参数名、成员变量、局部变量需要使用小驼峰命名法(lowerCamelCase)。比如:
getUserInfo() createCustomThreadPool() findAllByUserName(String userName) TaskRepository taskRepository;
相比小驼峰法,大驼峰法(即帕斯卡命名法)把第一个单词的首字母也大写了。常用于类名,命名空间等。如:
class TaskDateToSend{} class TaskLabelToSend{} SettingRepository
蛇形法是全由小写字母和下划线组成,在两个单词之间用下滑线连接即可。测试方法名、常量、枚举名称需要使用蛇形命名法(snake_case)。如:
first_name last_name MAX_ITERATION LAST_DATA
在串式命名法中,各个单词之间通过下划线“-”连接,比如:
hello-world first-project
建议项目文件夹名称使用串式命名法(kebab-case),比如 dubbo 项目的各个模块的命名是下面这样的:
给出各个场景下的命名规则,大家要养成习惯。事实上,如果经常在各个语言上切换的话,真的可能搞混。所以今天就Mark一下吧。
Java的包名由小写单词组成,包的路径符合所开发的系统模块的定义,以便通过包名可得知其属于哪个模块,从而方便到对应包里找相应的实现类。
常规包名
为了保障每个Java Package命名的唯一性,在Java编程规范中要求开发人员在自己定义的包名前加上唯一的前缀.由于互联网上的域名称是不会重复的,所以多数开发人员采用自己公司在互联网上的域名称作为自己程序包的唯一前缀.例如 : com.sun.swt...
自定义包名
一般公司命名为com.公司名.项目名.模块名....那我们个人的项目又怎么命名呢?个人的英语单词有individual、personal、private、one-man,进一步对以上四个单词词意进行分析并在保证了唯一性,继而使用每个单词的前4个字母作为前缀,与com也做了区分.示例如下所示:
类:总是使用首字母大写单词串。如MyClass、ClassName。内部类可以使用额外的前导下划线。
函数和方法:小写+下划线,如method_name。
函数参数:小写+下划线,如function_parameter_name。如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线,如random_。
全局变量:对于from M import *导入语句,如果想阻止导入模块内的全局变量可以使用旧有的规范,在全局变量上加一个前导的下划线,如_var_name。应避免使用全局变量。
变量:小写,由下划线连接各个单词。如color、this_is_a_variable。注意:
常量:常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOW,TOTAL。
异常:以“Error”作为后缀。
文件名:全小写,可使用下划线
包:应该是简短的、小写的名字。如果下划线可以改善可读性可以加入,如mypackage。
模块:与包的规范同,如mymodule。
缩写:命名应当尽量使用全拼写的单词,缩写的情况有如下两种:
前导后缀下划线:
特定命名方式:主要是指 xxx 形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。如 class Base(object): def init(self, id, parent = None): self.id = id self.parent = parent def message(self, msgid): 其中 id、parent 和 message 都采用了系统保留字命名法。
Python推荐使用蛇形命名法,因为 Python 是蟒蛇啊,理所当然是用蛇形命名……
综合各方面考虑,驼峰式命名法比较好,优势明显,事实上,目前使用驼峰式命名法的人也真的越来越多了。
最后,大家是在命名有困难可以上一个神奇的网站:
https://unbug.github.io/codelf/
推荐阅读:
干货 | 想学习优化算法,不知从何学起?
干货 | 运筹学从何学起?如何快速入门运筹学算法?
干货 | 学习算法,你需要掌握这些编程基础(包含JAVA和C++)
干货 | 算法学习必备诀窍:算法可视化解密
干货 | 模拟退火、禁忌搜索、迭代局部搜索求解TSP问题Python代码分享