天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

代码整洁之道

itzoo 453次浏览 0个评论

点击“终码一生”,关注,置顶公众号

每日技术干货,第一时间送达!



1

命名篇


  • 避免使用误导性的命名,比如是List类型变量才会命名为accountList;不使用小写的字母L和大写的字母O来命名变量,因为他们会和数字1和0混淆

  • 变量的命名使用有区分意义的词。比如,ProductInfo和ProductData就没区分;Info和Data就像the、a、an一样是混淆的废话;变量名不出现Variable,表名不出现Table

  • 类名不出现Manager、Processor、Data、Info这类类名;类名必须是名词

  • 使用工厂来新建对象比new对象要好,可以将构造函数private化,比如Complex.fromRealNameNumber(23.0)比new Complex(23.0)要好

  • 每个概念只使用一个词。比如,fetch、retrive和get表示一个意思,尽量别同时出现多个

 


2

函数篇


  • 函数应该短小,20行封顶最佳

  • 函数应该只做一件事情,如果一个函数可以继续拆分,则说明该函数不止做了一件事

  • switch 语句如果太长,可以考虑使用 多态 来替代

  • 函数名不要怕长,最好使用描述性的名称,能表达出函数的意义就好

  • 函数参数:

  • 函数的参数越少越好,最好别超过三个,三个或三个以上可以封装成一个对象

  • 对于传入单个参数的函数,一种普遍的作用是使用该参数做别的事,另一种是操作该参数本身。这种情况参数名最好能区分这两种形式,比如String transform(StringBuffer in),告诉读者期望的输入和输出类型。

  • 如果需要向函数传入布尔值,可能考虑将函数分为两个函数使用

  • 函数名最好由动词加名词组成,比如write(name)就不如writeFiled(name)好,后者清楚知道name是个filed

  • 函数名要明确描述函数所做的所有事情,避免给调用者带来意外的混乱

  • 使用异常代替返回错误码。错误码是在要求调用者立即处理错误,异常可以在后面统一处理

  • 使用了try…catch的代码块最好单独抽离出来一个函数,再调用他,避免把主流程混乱

  • 消除重复的代码


 

3

注释篇


  • 注释的作用是弥补我们在用代码表达意图时遭遇的失败,所以说,注释是一种失败!


  • 如果遇到需要写注释的情况,可以优先考虑是否能用变量名或方法名来表达,比如下面,第二种表达会更好:


// 判断员工是否合法,并且年龄大于65岁
if(employee.flag && employee.age > 65)
if(employee.isEligibleForFullBenefits())


  • 好的注释使用范围:


  • 表明法律、作者信息

  • 提供有用的信息,比如对抽象函数注释、对一个正则表达式期望匹配的格式注释等

  • 阐释,对一个比较难懂的参数或返回值进行说明

  • 警示,对一些重要代码进行警示,防止别人修改该代码

  • // TODO对未完成的工作进行注释

  • 公共API的Javadoc


  • 坏的注释实例:


  • 多余的注释,比如有无注释意图都很明显的代码

  • 误导性注释,注释和代码实际行为不符合

  • 循规式注释,比如要求所有函数都要有Javadoc注释

  • 能用函数或是变量名时,就别用注释

  • 括号后后面的注释,本意是好的,但是根本解决方法应该是缩短函数篇幅


while(xxxx){
.......
if(xxx){
......
} // if
} // while


  • 注释掉的不用的代码直接删除,别怕找不回



4

格式篇


  • 封包声明、导入声明和每个函数之间使用 空行 隔开,提高代码的视觉效果

  • 质检关系“亲密”的概念应该相互 靠近,而不是空行隔开

  • 变量的声明应该在 靠近 使用的位置

  • 类成员变量应该声明在类的顶部,循环中变量应该在括号内声明

  • 相关函数,比如A函数调用了B函数,则A和B最好放在一起,而且A放在B上面

  • 每行代码长度最好不要太长,比如最好80个字符,或是100~120个字符内


 

5

对象和数据结构篇


  • 类的私有变量如果提供了取值器和赋值器,那么它仍然是 暴露 了

  • 墨忒尔定律:模块不该去了解它所操作对象的内部情形。就是说,对象不改通过存取器暴露其内部变量。更准确的说,墨忒尔定律认为,类C的方法f只能调用以下对象的方法:


  • C

  • 由f创建的对象

  • 作为参数传递给f的对象

  • C的成员变量的对象


即,方法不该调用任何函数返回的对象的方法,只跟朋友对话,不与陌生人对话



6

其他


  • 函数不要返回控制,避免使用时检查

  • 函数参数不要传递空值

  • 第三方API如果抛出大量异常,可以考虑封装下再使用


来源:cnblogs.com/moongeek/p/11373468.html


PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。 


往期推荐



MySQL + JSON = 王炸!!

MyBatis 二级缓存 关联刷新实现

Apache 与 Nginx:你应该选择哪个 Web 服务器

一个宝藏开源软件,跨平台终端神器 Tabby!

so easy!一键安装 永久激活 告别繁琐配置…

京东二面:商品库存的扣除过程,如何防止超卖?



ITZOO版权所有丨如未注明 , 均为原创丨转载请注明来自IT乐园 ->代码整洁之道
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址