Code Review 是一场苦涩但有意思的修行。

书接上篇,本次一起继续探讨一下,该如何写出优雅的代码?

1. 编码时:搞的复杂并不好 

坏习惯一:多余的 if/else。

反例:

类似上面这种写法,if/else 就显得有点高射炮打蚊子,有的同学就会按照下面方式进行简化。

addBool = (i == 0) ? true : false;

这种方式简化当然跑起来没问题,代码确实简化了不少,但是还是略显冗余啊。

正解:

addBool = (i == 0);

坏习惯二:多余的 else。

反例:

仅以上图为例,每次看到类似截图中的代码,心里都发毛,完全可以提前 return,进而干掉 else 分支。

正解:

心声:

  • 简单就是美,代码写的越少,犯错的几率就越小。
  • 提前终止程序,绝大多数情况下,会节省很多不必要的开销(会减少很多无效的判断,减少无效变量、对象的创建)。
  • 每种编程语言都离不开 if/else 进行条件判断,如果在编码时,存在过多的 if/else 嵌套,代码的可读性就会下降,后期维护难度就会大大提高。

2. 编码时:不善于用轮子  

毛病一:随处可见的判空逻辑。

反例:

if(merId == null || "".equals(merId)) {//do something
}

程序为了避免 NPE,很多时候都需要做非空检查,当然上面这种检查方式很有效,只是项目中有太多的属性字段等待去校验,如果到处都是类似的判断,确实有点不太雅观。

很多同学会想着,自己封装 StringUtils 工具类,其实更推荐大家使用三方的轮子。

推荐1:Apache commons-lang 工具包

if(StringUtils.isBlank(merId)) {//do something
}

推荐2:谷歌的 Guava 工具包

if(Strings.isNullOrEmpty(merId)) {//do something
}

心声:

  • Apache Commons 下面的工具包,用熟了,确实很香。

  • 谷歌的 Guava 工具包也不错,该类库经过高度的优化,方便我们快速编码,能规避不少编码错误。

毛病二:完成对象间的属性 Copy,编写冗长的代码。

反例:

... ...
batchEntity.setNotifyType(batchEntityOld.getNotifyType());
batchEntity.setUpdatedTime(batchEntityOld.getUpdatedTime());
batchEntity.setBizType(batchEntityOld.getBizType());
batchEntity.setMerchId(batchEntityOld.getMerchId());
... ...

正解:

方式 1:采用 Apache BeanUtils 完成属性赋值。

BeanUtils.copyProperties(batchEntityOld,batchEntity);

方式 2:采用 Spring BeanUtils 完成属性赋值。

BeanUtils.copyProperties(batchEntity,batchEntityOld);

对的,你没看错,方法名称、参数都一样,但是 target、source要注意(稍有不慎,就入坑啊!)

不过,这里更推荐使用 Spring BeanUtils,而且在阿里开发规约中也明确强制使用 Spring BeanUtils 完成属性的 copy。

另外,为什么不建议使用 Apache BeanUtils 呢?看看源码就知道啦。

性能问题,估计跟日志输出、类型判断、用 + 号进行字符串拼接等脱不了关系。

3. 寄语写最后 

精妙的代码简洁明了,如果将这个代码给其他程序员看,他们会说:“哇,这代码写得真好。”那感觉很像在写一首诗。

我等采石之人当心怀大教堂之愿景——《程序员修炼之道》。

在一个项目的整体结构之内,总有空间展示个性和匠心……百年之后,我们的技艺或许如今日的土建工程师看待中世纪大教堂建造者使用的技法一样陈旧,但是我们的匠心却会得到尊重——匠人精神。

好了,本次就谈到这里,一起聊技术、谈业务、喷架构,少走弯路,不踩大坑。会持续输出原创精彩分享,敬请期待!

推荐阅读:

(一)改掉这些坏习惯,还怕写不出健壮的代码?

(二)改掉这些坏习惯,还怕写不出优雅的代码?

(三)改掉这些坏习惯,还怕写不出优雅的代码?相关推荐

  1. (二)改掉这些坏习惯,还怕写不出优雅的代码?

    Code Review 是一场苦涩但有意思的修行. 上期分享,通过示例剖析编码中一些经常触犯的性能点,以及编码时常犯的一些小毛病,来告诉新手程序员如何写出健壮的代码. 咱们书接上篇,本次一起来探讨一下 ...

  2. java十进制小数转化为二进制小数代码 乘二取整法_(四)改掉这些坏习惯,还怕写不出健壮的代码?...

    Code Review 是一场苦涩但有意思的修行. (一)改掉这些坏习惯,还怕写不出健壮的代码? (二)改掉这些坏习惯,还怕写不出优雅的代码? (三)改掉这些坏习惯,还怕写不出优雅的代码? 书接上篇, ...

  3. (四)改掉这些坏习惯,还怕写不出健壮的代码?

    Code Review 是一场苦涩但有意思的修行. (一)改掉这些坏习惯,还怕写不出健壮的代码? (二)改掉这些坏习惯,还怕写不出优雅的代码? (三)改掉这些坏习惯,还怕写不出优雅的代码? 书接上篇, ...

  4. (六)改掉这些坏习惯,还怕写不出精简的代码?

    鲁迅说:嬉笑怒骂里充满了无奈和妥协. 小猿说:先生说的不对,在程序员的世界里,编写代码处处充满了无奈和妥协. (一)改掉这些坏习惯,还怕写不出健壮的代码? (二)改掉这些坏习惯,还怕写不出优雅的代码? ...

  5. (五)改掉这些坏习惯,还怕写不出精简的代码?

    鲁迅说:嬉笑怒骂里充满了无奈和妥协. 小猿说:先生说的不对,在程序员的世界里,编写代码处处充满了无奈和妥协. Code Review 是一场苦涩但有意思的修行. (一)改掉这些坏习惯,还怕写不出健壮的 ...

  6. (一)改掉这些坏习惯,还怕写不出健壮的代码?

    Code Review 是一场苦涩但有意思的修行. 近期对团队负责的项目,进行了一次 Code Review,代码评审过程中遇到的那些编码坏习惯,笑的合不拢嘴.不过,评审中很多代码编写问题,以往都多次 ...

  7. 每月改掉一个坏习惯,遇见更好的自己

    -1- 有人说,人生不过是无数习惯的总和. 查尔斯·杜希格在<习惯的力量>中写道:「人每天的活动中,有超过40%是习惯的产物,而不是自己主动的决定.虽然每个习惯的影响相对来说比较小,但是随 ...

  8. 谈代码整洁之道,如何写出优雅的代码

    最近为了制定团队的代码规范,拜读了鲍勃大叔的<代码整洁之道>,读完之后,在如何写出整洁优雅的高质量代码方面有很大的启发.我认为<代码整洁之道>是我们提高编程能力和自我修养必读之 ...

  9. 优雅写mysql_如何写出优雅的代码?

    我 18 年在 PyCon 做过一次类似的分享 ,目的是如何写出优雅的代码.希望能部分回答这个问题,也希望与大家多多讨论.<聊聊编程原则>​zhuanlan.zhihu.com 要成为合格 ...

最新文章

  1. exchange迁移测试作业
  2. mybatis学习7之动态sql
  3. dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案
  4. jMeter工具里左边树形结构里一些节点属性的介绍
  5. Pointcut is not well-formed: expecting #39;name pattern#39; at character position 36
  6. Android屏幕大小适配问题解决
  7. android Activity 之间传递复杂对象
  8. freeswitch php事件订阅,例子3:事件订阅,监听多个事件
  9. (原创)计算机视觉之数学原理-基础篇
  10. jquery中常容易出错的checkbox的获得值
  11. macOS Big Sur Beta4 无法收到更新通知解决办法
  12. 模电摸索日记之《模电基础》
  13. B站晚会大火的 140 万个理由!
  14. ov5640帧率配置_基于OV5640的FPGARAM HDMI显示
  15. 中英文标点符号切换的组合键_切换中英文标点快捷键
  16. MFC中TXT文件读写
  17. iOS开发UI基础—09UIImageView动画示例之汤姆猫程序
  18. 活动报名 | 清华大学交叉信息研究院高阳:视觉机器人学习
  19. Oracle数据库备份与恢复命令
  20. 通俗易懂 !Kafka 开发快速入门看这篇就够了

热门文章

  1. STM32F429 21. LTDC 液晶屏幕
  2. windows服务创建
  3. 油库、加油站、危化企业防雷工程应用方案
  4. 一个typedef的用法
  5. 硬盘分区形式MBR转GPT
  6. 信息系统项目管理师 第七章-项目成本管理
  7. tarjan算法求解强连通分量问题
  8. Lua最简单的入门教程
  9. 安卓 chrome html文件,打开Chrome浏览器在本地文件的Android
  10. Lab 0: Setting up a productive workflow