设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者
123425 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 113 讲
设计模式与范式:行为型 (18讲)
设计模式之美
15
15
1.0x
00:00/00:00
登录|注册

33 | 理论五:让你最快速地改善代码质量的20条编程规范(下)

注释的内容
接口和抽象类的命名方式
命名要可读、可搜索
命名的关键
学会使用解释性变量
移除过深的嵌套层次
函数设计要职责单一
勿用函数参数来控制逻辑
避免函数参数过多
把代码分割成更小的单元块
类中成员的排列
缩进和大括号的排列
善用空行分割单元块
一行代码多长最合适
函数、类的大小限制
注释
命名
统一编码规范
编码技巧
代码风格
命名与注释
课堂讨论
编程规范
编程规范知识关系脑图

该思维导图由 AI 生成,仅供参考

上两节课,我们讲了命名和注释、代码风格,今天我们来讲一些比较实用的编程技巧,帮你切实地提高代码可读性。这部分技巧比较琐碎,也很难罗列全面,我仅仅总结了一些我认为比较关键的,更多的技巧需要你在实践中自己慢慢总结、积累。
话不多说,让我们正式开始今天的学习吧!

1. 把代码分割成更小的单元块

大部分人阅读代码的习惯都是,先看整体再看细节。所以,我们要有模块化和抽象思维,善于将大块的复杂逻辑提炼成类或者函数,屏蔽掉细节,让阅读代码的人不至于迷失在细节中,这样能极大地提高代码的可读性。不过,只有代码逻辑比较复杂的时候,我们其实才建议提炼类或者函数。毕竟如果提炼出的函数只包含两三行代码,在阅读代码的时候,还得跳过去看一下,这样反倒增加了阅读成本。
这里我举一个例子来进一步解释一下。代码具体如下所示。重构前,在 invest() 函数中,最开始的那段关于时间处理的代码,是不是很难看懂?重构之后,我们将这部分逻辑抽象成一个函数,并且命名为 isLastDayOfMonth,从名字就能清晰地了解它的功能,判断今天是不是当月的最后一天。这里,我们就是通过将复杂的逻辑代码提炼成函数,大大提高了代码的可读性。
// 重构前的代码
public void invest(long userId, long financialProductId) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1));
if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {
return;
}
//...
}
// 重构后的代码:提炼函数之后逻辑更加清晰
public void invest(long userId, long financialProductId) {
if (isLastDayOfMonth(new Date())) {
return;
}
//...
}
public boolean isLastDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1));
if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {
return true;
}
return false;
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文总结了20条编程规范,旨在帮助程序员快速改善代码质量。其中包括将代码分割成更小的单元块,避免函数参数过多,勿用函数参数来控制逻辑,以及函数设计要职责单一等实用的编程技巧。作者强调了模块化和抽象思维的重要性,提倡将复杂逻辑提炼成类或者函数,以提高代码的可读性。此外,文章还提到了处理函数参数过多的方法,包括拆分成多个函数或将参数封装成对象。同时,作者也警示不要在函数中使用布尔类型的标识参数来控制内部逻辑,而是建议将其拆分成多个函数,以提高可读性和代码质量。最后,文章强调了函数设计要职责单一的重要性,通过示例代码展示了如何将一个函数拆分成多个职责单一的函数。这些编程规范和技巧能够帮助程序员在实践中提高代码的可读性和质量,是非常实用的编程指南。文章还提到了移除过深的嵌套层次和学会使用解释性变量等编码技巧,以及统一编码规范的重要性。通过这些技巧和规范,读者可以明显改善代码的可读性,提高代码质量。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(90)

  • 最新
  • 精选
  • 🐾
    老师晚上好、关于代码规范这块,是不是有好的Java开发脚手架推荐呢?我发现公司的代码没有统一的脚手架,各小组重复造轮子,想规范化这块,但又不知道有哪些通用的脚手架。

    作者回复: 可以看下这篇文章: https://mp.weixin.qq.com/s/0eOm3dBOlFUy8Si1_k7OAw 代码中的很多低级质量问题不需要人工去审查,java开发有很多现成的工具可以使用,比如:checkstyle,findbugs, pmd, jacaco, sonar等。 Checkstyle,findbugs,pmd是静态代码分析工具,通过分析源代码或者字节码,找出代码的缺陷,比如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。三者都可以集成到gradle等构建工具中。 Jacoco是一种单元测试覆盖率统计工具,也可以集成到gradle等构建工具中,可以生成漂亮的测试覆盖率统计报表,同时Eclipse提供了插件可以EclEmma可以直观的在IDE中查看单元测试的覆盖情况。 Sonar Sonar 是一个用于代码质量管理的平台。可以在一个统一的平台上显示管理静态分析,单元测试覆盖率等质量报告。

    2020-01-17
    11
    65
  • 黄林晴
    老师好 现在我是开始二刷 意识到一个问题就是识不要用标记位来控制代码的执行逻辑 但拆分多个函数不也要先判断标记位再执行对应的方法吗

    作者回复: 你说的没错,关键看这个标记位的判断是放到上层逻辑还是下层逻辑,理论上讲,这种“ugly”的代码尽量放到上层。

    2020-06-19
    5
  • 淤白
    Tap键、CodeReview没有做到,别的都在无意识之间做到了,打个卡。。。

    作者回复: 加油

    2020-11-25
    1
  • 小情绪
    王争老师,我瞅了一眼Android的java层源代码,类里面的import包没有按字母从小到大,作用域也没有按大小依次排列,是不是Google并不是严格执行这套标准,还是别的原因?

    作者回复: Android是收购的吧������

    2020-08-28
    2
    1
  • feifei
    这个if else拆的函数太多了,类就大了,类大了,同样阅读性很差,找一个方法,翻来翻去的,所以我觉得只要方法不是太长,就不必要拆开多个小的方法,老师觉得呢

    作者回复: 你说的没错!拆太细、太小的函数,也没意思,读代码的时候跳来跳去,容易打断思路

    2020-05-20
    1
  • Michael
    public void getUser 这个返回值和函数命名好像不是很搭哦

    作者回复: 是的,我改下,多谢指出

    2020-01-18
    1
  • 记事本
    为什么不能用tab缩进?

    作者回复: 文章中有解释

    2020-08-13
  • 编程界的小学生
    // 拆分成三个函数 public boolean checkUserIfExistingByTelephone(String telephone); public boolean checkUserIfExistingByUsername(String username); public boolean checkUserIfExistingByEmail(String email); 这种的,不也得判断是不是空吗?不是空的话调用。 是不是可以把判断 放到每个小方法里面,是空就false

    作者回复: 没太看懂你说的😂

    2020-01-17
    2
  • 再见孙悟空
    不要在函数中使用布尔类型的标识参数来控制内部逻辑,true 的时候走这块逻辑,false 的时候走另一块逻辑。这明显违背了单一职责原则和接口隔离原则。我建议将其拆成两个函数,可读性上也要更好。这个深有感触
    2020-01-17
    10
    94
  • 黄林晴
    打卡 明天最后一天上班 就放假了
    2020-01-17
    23
    39
收起评论
显示
设置
留言
90
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部