《编写可读代码的艺术》---把信息装到名字里

把命名当成是一种注释的方式!

一个合适的名字,可以让它承载你要传递的信息。我们可以将其应用到变量、方法、类、接口、文件名等地方。

1:命名精准,避免泛泛

想想看你的代码中有这些词语吗?temp、item、data、result...这些都是泛泛的词语,我们完全可以结合上下文来赋予更加具体的值,比如result变量代表从数据库执行SQL语句的结果,我们可以使用isExcuteSuccess来代替。

再打个比方:循环中使用i,j来计数

想想看如果有三层循环,只使用i,j,k来存储每层的迭代值,那么在使用的时候有可能会搞混,但是如果使用具体的命名就会改善这个情况,比如循环全年级的学生,使用gradeIndex、ClassIndex,就比i、j要好。

2:职责明确,避免模糊

比如我们要过滤用户输入的文本包含的Sql注入代码,取个名字叫ClearUserInput,别人很难一眼就看出这个类的职责。,如果取成RemoveInjectSQL,我们就知道这个方法是用来清除注入SQL的(为何不加字符串部分,参考第五点,比如该方法是在StringHelper方法里面的就可以这样写)

3:描述命名对象当前的状态

描述密码是加密过的: EncryptedPassword

描述用户的ID是GUID类型的:UserGuid

描述URL是编码过的:EncodedURL

4:慎用首字母缩写

除非团队、业界已经形成约定,规定了某些特定名称的缩写方式(img->Image;btn->Button)之外,肆意使用首字母缩写来进行命名将会降低代码可阅读性并有可能引起命名冲突

(本人实际项目中遭遇过使用缩写来命名数据库主键,结果合同表ContractRecord主键CRGUID和应诉案件CaseRespond主键CRGUID发生冲突)

很多朋友担心不使用缩写,会导致命名太长。这个时候你嘚观察下,命名对象的职责是否是单一的?

5:结合语境,给命名减肥

比如我们提供一个方法,将输入转化为字符串,你会怎么写?

ConvertToString(object obj)

这个命名有问题吗?没有!

但是如果有个合适的类来提供上下文语境,就可以再瘦身;比如它处于Convert类里面,它就变成了我们经常使用的

ToString(object obj)

6:均衡之道

如果按照以上方法,一个类下来,每个命名都是非常饱满的,写起来伤脑经,看起来很伤眼睛;那么什么情况下,可以适度精简呢?答案:命名对象的活跃程度(生命周期/引用频率等)。

短途旅行,你也会带上臃肿的行囊吗?

 

 

 

posted @ 2014-04-15 22:29  谪仙  阅读(266)  评论(0编辑  收藏  举报