10分钟了解代码命名规范(Java、Python)
前言
关于代码命名,我相信是经常困扰很多小伙伴的一个问题,尤其是对于强迫症晚期患者。怎么说呢,每次小编在写代码之前,总会在想啊想啊,用什么命名法好呢?对于经常在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。
注意:
- 不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。
- 私有类成员使用单一下划线前缀标识。
- 变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。
常量:常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOW,TOTAL。
异常:以“Error”作为后缀。
文件名:全小写,可使用下划线
包:应该是简短的、小写的名字。如果下划线可以改善可读性可以加入,如mypackage。
模块:与包的规范同,如mymodule。
缩写:命名应当尽量使用全拼写的单词,缩写的情况有如下两种:
- 常用的缩写,如XML、ID等,在命名时也应只大写首字母,如XmlParser。
- 命名中含有长单词,对某个单词进行缩写。这时应使用约定成俗的缩写方式。
例如:
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):
其中 id、parent 和 message 都采用了系统保留字命名法。
Python推荐使用蛇形命名法,因为 Python 是蟒蛇啊,理所当然是用蛇形命名……
综合各方面考虑,驼峰式命名法比较好,优势明显,事实上,目前使用驼峰式命名法的人也真的越来越多了。
reference
10分钟了解代码命名规范(Java、Python)的更多相关文章
- Java语言基本语法(一)————关键字&标识符(Java语言标识符命名规范&Java语言的包名、类名、接口名、变量名、函数名、常量名命名规则 )
一.关键字 关键字的定义和特点 定义:被Java语言赋予特殊含义,用做专门用途的字符串(单词). 特点:关键字中所有字母均为小写 下面列举一些常用的关键字. 用于定义数据类型的关键字:byte.sho ...
- js 代码命名规范系列
在微博上看到一个段子 “老子哪天出任ceo迎娶白富美走上人生巅峰之后,一定要雇两个长腿大熊的妹子.一个帮我想变量名字,一个帮我想git commit的message!” 可以看出 命名方方面面的问题困 ...
- c#/js代码命名规范及代码规范
常用命名 列表,lUser 数组,arrUser 字符串,strTitle 用,分割的字符串,strStatuss(多个用逗号分割的状态) C# Entity层 统一以E开始,比如EUser,EOrd ...
- 10分钟了解 代理模式与java中的动态代理
前言 代理模式又分为静态代理与动态代理,其中动态代理是Java各大框架中运用的最为广泛的一种模式之一,下面就用简单的例子来说明静态代理与动态代理. 场景 李雷是一个唱片公司的大老板,很忙, ...
- Python代码编码规范
目录 1. Introduction 介绍 2. A Foolish Consistency is the Hobgoblin of Little Minds 尽信书,则不如无书 3. Code la ...
- android命名规范
Android 开发规范 (陈杨) (一)注意事项 1. 编码方式统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了. 2. 缩进统一为4个空格,将Tab si ...
- pyhton自动化项目编码以及命名规范
对于任何一个编程项目来说,都需要一个编码的规范以及标准,这里整理了一些Google python的命名规范以及python语言PEP8的编码规范. 一.命名规范 命名示例: module_name, ...
- python代码规范和命名规范
一.简明概述 1.编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识 2.代码格式 2.1.缩进 统一使用 4 个空格进行 ...
- 【python】10分钟教你用python一行代码搞点大新闻
准备 相信各位对python的语言简洁已经深有领会了.那么,今天就带大家一探究竟.看看一行python代码究竟能干些什么大新闻.赶紧抄起手中的家伙,跟我来试试吧. 首先你得先在命令行进入python. ...
随机推荐
- 1382 - The Queue
1382 - The Queue PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB On som ...
- 解决"The remote SSH server rejected X11 forwarding request"问题
今天突然想起来好久没有登录我的vps了,于是下载了xshell,填入地址登录后,看到提示"WARNING! The remote SSH server rejected X11 forwar ...
- 图像处理opencv-Rect 排序、合并[转]
opencv进行rect检测时,当检测到多个rect,组成rect vector之后,有些rect是由一个区域误分割得到的, 可以按照某种规格将这些rect合并为一个rect.比如按照x,y,widt ...
- CS5213设计HDMI转VGA带音频信号输出|CS5213方案|CS5213设计电路
CS5213是一款用于设计HDMI转VGA音视频信号转换器方案,CS5213设计HDMI转VGA转换器或者转接线产品特点: 将完整的HDMI信号转换为VGA输出支持数字信号到模似信号的转换支持 HDC ...
- Flink sql 之 微批处理与MiniBatchIntervalInferRule (源码分析)
本文源码基于flink1.14 平台用户在使用我们的flinkSql时经常会开启minaBatch来优化状态读写 所以从源码的角度具体解读一下miniBatch的原理 先看一下flinksql是如何触 ...
- Java EE数据持久化框架 • 【第3章 MyBatis高级映射】
全部章节 >>>> 本章目录 3.1 一对一映射 3.1.1 自动化一对一映射 3.1.2 标签配置一对一映射 3.1.3 标签配置一对一映射 3.1.4 实践练习 3.2 ...
- Kerberos加密级别不支持的问题
1.问题现象 Zookeeper开启kerberos认证后出现如下问题,不支持的加密级别: 2017-02-23 09:20:57,048 [myid:1] - WARN [NIOWorkerThre ...
- nginxWebUI
nginx网页配置工具 github: https://github.com/cym1102/nginxWebUI 功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, ...
- c# - 数据类型转换和控制台输入
1.使用c#自带的 Convert类转换数据类型 2.源码 using System; namespace ConsoleApp1.toValue { class excutejiecheng { s ...
- BIO、NIO、AIO --- 个人理解
1.前言 什么是 BIO.NIO.AIO ,不难看出,都是共同的字符IO , IO的意思是input output ,即输入输出 , 那么 B . N .A 分别指不同的io模型 ,而io又分为 ...