代码整洁之道札记:有意义的命名

前言:英语虽然才3级,奈何却阻止不了我征服英语的勇气,哈哈,有意义的命名,那必须要倾尽我的所有英语才华,去实现代码的整洁啊。

名副其实

这个说起来容易,做起来难,我们的母语是汉语,最熟悉的是汉语拼音,所以我们在新建一个类名、方法、变量时,第一刻的印象是由拼音组成的;另外由于项目参与者的英语水平又参差不齐,又会产生混乱。

public class Time {
 private long time1;
 private long time2;
 private long time3;
 private long time4;
 private long time5;
 private long time6;

看到这个类,你肯定不知道这个类是想要干嘛的,那么如果要按照名副其实的原则来改造,那么就应该如下:

/**
* @ClassName: SpendTimeForTrading
* @Description: 记录交易用时。
* @author maweiqing
* @date 2015年5月11日 上午9:09:42
*
*/
public class SpendTimeForTrading {
 private long checkOrderTime;
 private long tradeMatchTime;
 private long updateMoneyTableTime;
 private long dealQuotationTime;

另外,代码中尽量不要出现这样的代码

if (trade.getOrderType()==0) {

别人不知道0是什么,就看不懂你的条件到底是为了判断什么,应该修改为这样

if (trade.isContract()) {

public boolean isContract() {
  return this.getOrderType().intValue() == CONTRACT;
 }

public static final int CONTRACT = 0;

这样别人很清楚你的代码是判断什么,并且如果0的约定修改为1,那修改起来就只需要把CONTRACT = 1就行了,不需要在代码中苦苦搜寻trade.getOrderType()==0了。

注意:切记,在封装bean的时候,如果你有这样的代码

private int buy;

 public int getBuy() {
  return this.buy;
 }

 public void setBuy(int buy) {
  this.buy = buy;
 }

 public boolean isBuy() {
  return this.getBuy() == 0;// 假设0现在代表是买,为方便示例,不再建立常量
 }

如果你要用fastjson进行序列化或者反序列化

CleanCode code = new CleanCode();
  code.setBuy(1);

  System.out.println(JSON.toJSONString(code));

你认为会输出什么呢?

答案是

{"buy":false}

why?为什么,因为isBuy其实也是getter的一种写法,工具类在序列化的时候,会先序列化get对应的buy,接着再序列化is对应的buy,而放入到map时,is会将get覆盖,而is的field类型是Boolean,而buy的是int。如果把isBuy放到getBuy前面的,得到的答案就会是

{"buy":1}

当然我来举这个例子的好意不是让你置换顺序,而是告诫你,如果你有类似这种写法,请改正为如下方式:

private int buy;

 public boolean typeOfBuy() {
  return this.getBuy() == 0;// 假设0现在代表是买,为方便示例,不再建立常量
 }

 public int getBuy() {
  return this.buy;
 }

 public void setBuy(int buy) {
  this.buy = buy;
 }

避免误导

这个着我想起,很多老师在教学生编程的时候,特别喜欢写这样的例子

System.out.println(10 == 1O);
  System.out.println(101 == 10l);

我当时特别讨厌这样的例子,虽然是为了反面教材,但是让我的记忆当中充斥这这种错误例子。

还有,很多时候,有这样的代码

String msgs = new String("1");

莫名其妙的在msg上加上s,当然还有更坑爹的。

做有意义的区分

假如在一个方法内部,你需要记录时间差,你写成这样

long t3 = System.currentTimeMillis();
// 更新资金表
dealVrailMoney(this.getVarialMoneys());
long t33 = System.currentTimeMillis();
time.setUpdateMoneyTableTime(t33 - t3);

我们都还可以接受,毕竟做太多无畏的区分没有必要。

但是更多时候还存在这样的代码

public static String formatDateToDashByLong(Long date) {
public static String formatDateToDashByInt(Integer date) {

不知道为什么非要加上ByLong、ByInt!

使用读得出来的名字

很多时候,我们习惯按照自己的喜欢随意造词,只要编译器能够通过,我们才不管别人是否能够将名字读出来,但是这个做法的确很不好,很不友好。

每次看到恒大淘宝队,就感觉别扭。

使用可搜索的名称

这个尤其是对那些常量来说,如果不能够将经常用到的值存成一个代表有含义值的常量存在,简直就是遭罪。

/**
  * 买 0
  */
 public static final int BUY = 0;

 /**
  * 订立 0
  */
 public static final int CONTRACT = 0;

如果不把0存成各为其主的常量名字,当你需要变更的时候,你就痛苦了。

避免使用编码

我也很习惯使用这样的标识

int numInt;
String numString;

然而细想想这样很糟糕,多此一举啊。

最初在写构造方法的时候,习惯写这样的代码

private int num;
public Num(int i_num) {
    num = i_num;
}

直到后来才知道使用this关键字来替代,显然this关键字的写法更好。

在最初定义接口的时候,我习惯这样写:

public interface FanyongInterface {//我不太清楚返佣的英语怎么写,没有找到返佣的英语单词,姑且这样写着

但我更应该这样写

public interface Fanyong {

实现类的名字可以为FanyongImp,这样在调用的时候就可以直接使用Fanyong而不是FanyongInterface。

避免思维映射

这里我想用互联网上一句名言来说明“任何傻瓜都能写出计算机可以理解的代码,而好的程序员能写出人可以读懂的代码”。太多时候,我们对于名称的命名含糊不清,搞不懂我们写这个名称到底要代表什么。

对于类名、方法名,我们尽量用名词声明类,动词表示方法。

这里我把作者的建议重复下来:

别把名字装扮的太过可爱。

每个概念对应一个词。(不要让manager和controller在一起)

别用双关语。

添加有意义的语境。

/**
  * 5已申报
  */
 public static final int GODOWN_DECLARED = 5;
//用来表示仓单
 /**
  * 6已匹配
  */
 public static final int GODOWN_MATCHED = 6;

不要添加没有用的语境。

class Godown {
    private static final int GODOWN_DECLARED = 5; //这就不太合适了
}

总之:有意义的名字,似乎对于我们国人来说难度大了点,我自己也时常因为这而苦恼,因为英语实在不敢恭维,于是什么有道词典了,微软词典了,就是电脑上必装的。取好一个名字很重要!

时间: 2024-10-30 15:00:13

代码整洁之道札记:有意义的命名的相关文章

代码整洁之道札记:格式

前言:东汉大臣陈蕃有一则这样的故事,"一屋不扫何以扫天下",寓意来表明一个大丈夫,如果连自己的居室都不能打扫干净,怎么胸怀天下.<代码整洁之道>就是来劝诫我们程序员写出更优秀的代码,而"格式"一章也恰巧给我们举出了很多原则,以供我们写出更加规整的代码. 格式的目的 好的代码格式,让人赏心悦目,并且随着版本的更迭,让你能够随心所欲的进行变更,而不是每次都痛苦不堪. 垂直格式 类文件的行不应该成千上万行,应尽量保持短小,当然这点很难做到,我们习惯于在一个类中

代码整洁之道札记之整洁代码

前言:一直以来,我都非常喜欢整洁规则的代码,我痛恶那些杂乱不堪的代码,然而<代码整洁之道>将要告诉我的远不止这些,那么,我希望将自己欣赏的.能够给我帮助的.指引我前进的方案记录下来,以用来我日后翻看. 要有代码 将需求明确到机器可以执行的细节程度,是编程要做的事.一个好的产品,显然其最精髓的不应该是外观,而是诸如Java编译后的class文件. 糟糕的代码 看到"糟糕"这个词就觉得可怕,我之前接手的一个web项目,最初打包完成后,足足有48M,里面充斥着大量的垃圾代码,糟糕

代码整洁之道札记:函数

前言:随着对<clean code>的不断深入研读,我越发对自己以前编写的代码感到厌烦,我开始着手去做一些改变,让我不再是一个傻瓜,我想让别人去读懂我的代码,因为我记得这样一句话:"任何傻瓜都能编写计算机看懂的代码,而好的程序员能够编写人看懂的代码". 短小 前两天,在百度首页上看到这样一张照片,手枪还没有巴掌大,我觉得非常适合Robert的这个主题. 函数是要足够的短小精致.那么具体应该短小到什么程度呢? 函数20行封顶最佳. 每个函数都依序把你带到下一个函数. 函数的缩

代码整洁之道札记:注释

前言:曾经我对"一份好的代码里注释至少要占到一半的份量"这样话深信不疑,我也不厌其烦的给每一个函数都加上javadoc,对此,我深感自豪:而对于别人写代码不加注释的"坏习惯",我深表遗憾.然而当我读完Robert的"注释"一节,我已经懊恼不已,并且我已经开始对我的代码进行审核,再次优化.我已经开始遵守"别给糟糕的代码加注释–重新写吧"这条准则. 也许你是一个好人,会对代码进行不断的优化改进,然而你经常会把注释忽略掉,就如同下面

《代码整洁之道》读后感

众所周知,软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发派还是传统开发派,都不得不承认.<代码整洁之道>提出一种观念:代码质量与其整洁度成正比.干净的代码,既在质量上较为可靠,也为后期维护.升级奠定了良好的基础.作为编程领域的佼佼者,这些实践在<代码整洁之道>中体现为一条条规则(或称“启示”),并辅以来自现实项目的正.反两面的范例.只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量.以上便是<代码整洁之道>这本书的内容简介,

《代码整洁之道》精读与演绎】之四 优秀代码的格式准则

本系列文章由@浅墨_毛星云 出品,转载请注明出处.  文章链接:http://blog.csdn.net/poem_qianmo/article/details/52268975 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 这篇文章将与大家一起聊一聊,书写代码过程中一些良好的格式规范. 一.引言 以下引言的内容,有必要伴随这个系列的每一次更新,这次也不例外. <代码整洁之道>这本书提出了一个观点:代码质量与其整洁度成正比,干净的代码,既在质量上

&lt;代码整洁之道&gt;、&lt;java与模式&gt;、&lt;head first设计模式&gt;读书笔记集合

一.前言                                                                                       几个月前的看书笔记,内容全部都是摘自书中比较精辟的句子.笔记都是一段一段的句子,故没有文章的篇幅概念,仅供温习之用,更多详细内容请看原书!!! <代码整洁之道>里面有很多前人编写简洁.漂亮代码的经验.当然书中作者的经验并不100%适合每个人,但大部分都是可借鉴的! <java与模式>这本书内容太多了,我

【读书笔记】--代码整洁之道

“相对于任何宏伟景愿,对细节的关注甚至是更为关键的专业性基础.首先,开发者通过小型实践获得可用于大型实践的技能和信用度.其次,宏伟建筑中最细小的部分,比如关不紧的门,有点儿没有铺平的地板,甚至是凌乱的桌面,都会将整个大局的魅力毁灭殆尽.这就是整洁代码之所系”----没有比书中的这段话更能说明这本书的意义了. <代码整洁之道>是第1期书山有路活动选出的读本.相对于记住那些如何写出整洁代码的那些法则,养成保持代码整洁.提高代码质量的习惯和思维更为重要.全书大致分为三个部分,第一部分1-10章都是介

代码整洁之道

命名,多花些时间推敲命名, 有意义的命名非常重要. 接口的命名,不使用"I"开头比较简洁,加上I以后是比较规范,但是比较繁琐以及废话.如果想区别接口和实现,不如在实现类中进行编码,比如添加后缀"Imp",android以及jdk中的大多数接口都没有使用I. 取名字带有简写要慎重, 比如"人事系统"的类, 前面都是"RSXT..",除了让快捷按钮找不到类以外,没有啥意义了,用包吧. 函数,函数要短小,要职责明确,最好功能单一,参