代码规范 : 自解释的神话
来源:互联网 发布:在日韩国人 知乎 编辑:程序博客网 时间:2024/06/15 19:21
写在前面: 好想找个女朋友,这样就可以帮我想变量名了,(玩笑脸)
多数初学者觉得,特意为代码去取一个名字没有必要.可你该明白: “代码阅读次数远远多于编写的次数, 确保名字更侧重于阅读方便而不是编写方便”
(当然,如果你认为你的程序能够满足”很好的描述了现实生活中的场景”,那么恭喜,你可以不用看着一篇文章了)
基本命名规范
计算机科学家想做的,就是将代码抽象成现实中有的事物,而命名就围绕这个想法展开.
一个好的名字不外乎: 简短, 能描述所代表的含义
接口(双驼峰):
1 对于Service 和 DAO 类 (下面有列表给出),实现类的后缀是 impl
2 形容能力的接口 以 able 作为后缀类名(双驼峰),应该是对一个类别的描述,常常会使用名词
函数(单驼峰),应该是动词,或者是动词短组(动词 + 宾语),并且描述其返回值
例如:参数,成员变量(单驼峰): 在多个相同的类型的参数,绝对不允许出现 name1 2name 这样的对象名,最多有人是用来表示 For 4 To 2 这样的
常量(全部大写):
下划线隔开 MAX_STOCK_COUNT
不允许出现魔法值(单独未定义的值) 例如: String personInfo = name + " and " + age 这样是不被允许的
不允许出现硬编码(和上面一条类似) // 用硬编码绑定到变量上可读性差 titleBar.color = 0xFF; // 方法一:用常量代替硬编码( 编译时绑定其值的变量) private static final int COLOR_BLUE = 0xFF ; .... titleBar.color = COLOR_BLUE; // 方法二: 用子函数,好处在于被调用时进行绑定,而且不暴露数据的来源 titleBar.color = ReadTitleBarColor();
- 数组: 括号写在定义之前的好处:当你的定义一组变量时,名称可能会残差不齐,将括号放在前面,能够提高理解
例如 : String[] args; String[] currentTimeMillis; 反例 : String args[]; String currentTimeMillis[];
- POJO类:强制 is放在表述 表示boolean值 的函数的开头,不能放在变量的开头
例子: boolean found = false; boolean isFound(){ return found; } 反例: is 放在变量前面的 boolean isFound = false; boolean isFound(){ return isFound; }
抽象类 使用 Abstract 或 Base 开头; 异常类命名使用 Exception 结尾; 测试类命名以它要测试的类的名称开始,以 Test 结尾
枚举类以Enum为 后缀 枚举成员名称需要全大写,单词间用下划线隔开
通用 : 提供语法环境,在归属一类名词的时候,为了帮助你知道那是一类什么东西,可以加上统一的前缀,或者后缀来帮助理解
布尔值命名: done (:标记事情完成),error,found,success/ok ,等等
有些玩家喜欢在他们的布尔变量名前加上 is,请不要这么做, if(found) 比 if(isFound) 的可读性更高,而且notFound 这样要使用否定时 变成 notNotFound 十分难以理解例如 FristName LastName ,如果单独出现在方法中,你很难猜测它的意思
可以加上 前缀address 来知道语句 , addressFristName addressLastName缩写: 去掉原有名字的元音字母.
例如 button = > btn , computer => cmptr
个人不推荐,毕竟你遵守的缩写规则,除非对方事先知道,不然不能一眼理解命名的含义
下面是常用的命名的列表
常用的命名
对仗词 表 : ( 表述两种对立的含义)
add/remove increment/decrement open/close begin/end insert/delete show/hide create/destory lock/unlock source/target frist/last min/max start/stop get/put next/previous up/down get/set old/new init/destory
限定词命名( 限定词加到名字最后)
数组下界 约定俗成的是 i j k 还可以用 *Index 其他的后缀 *Total *Sum *Average *Record *String *Pointer *Num *Count
应该避免的命名方式
避免在名字中使用数字 如 total1 ,total2 不要仅靠大小写来区分变量名 避免混淆的字符(1,l,I)(. ,)(2 z)(; :)(S 5)(G 6)..)
- java中各层命名规约(来自上面的延展):
A) Service/DAO 层方法命名规约 1) 获取单个对象的方法用 get 做前缀。 2) 获取多个对象的方法用 list 做前缀。 3) 获取统计值的方法用 count 做前缀。 4) 插入的方法用 save(推荐) 或 insert 做前缀。 5) 删除的方法用 remove(推荐) 或 delete 做前缀。 6) 修改的方法用 update 做前缀。B) 领域模型命名规约 1) 数据对象: xxxDO, xxx 即为数据表名。 2) 数据传输对象: xxxDTO, xxx 为业务领域相关的名称。 3) 展示对象: xxxVO, xxx 一般为网页名称。 4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。PS: 这部分的规约很有效,能让你快速的理解冗长函数想表达的含义类型,庞大项目的层次划分
当你能够熟练运用之后, 不要拘泥于以上的命名的规则,你可以打造自己的命名库,来调整自己之前的代码
写在后面: 貌似帮程序取名自己能做到了, 那还要啥女朋友
这篇文章是整理了以下书籍所整理出来的笔记:有兴趣的同学可以去看
< 代码大全2 >
< 重构:改善代码既有设计 >
< 代码整洁之道 >
< 阿里巴巴:java开发手册 >
- 代码规范 : 自解释的神话
- hibernate学习笔记2--对简单例子的代码的解释与简单优化(规范)
- 自编简单的shell命令解释器要求及代码
- 基本的代码规范
- 代码规范的必要性
- 规范自己的代码
- 代码规范的重要性
- 程序员的代码规范
- 我的代码规范。。。。
- java的代码规范
- 开发的代码规范
- 代码规范的重要性
- 代码规范的重要性
- 代码的命名规范
- Android:代码的规范
- android的代码规范
- 代码规范的重要性
- 代码的开发规范
- OpenStack公共组件oslo之十六——stevedore
- LeetCode 第1题 Two sum (easy)——python
- 实时库接口
- 使用 IntelliJ IDEA打包Spark应用程序
- redis爬坑记(三) java操作redis
- 代码规范 : 自解释的神话
- 8---------单链表算法的简单应用和巩固
- Spring xml配置文件头解析
- CGContextRef详解
- python 实现switch
- jhipster入门疑问之路二
- linux usb驱动中的urb详解
- PHP常见的设计模式之:工厂模式
- Python入门之Python安装