乐趣区

关于代码优化:如何写出没有注释的代码dog

“If our programming languages were expressive enough, or if we had the talent to subtly wield those languages to express our intent, we would not need comments very much—perhaps not at all.”– Robert C.Martin《Clean Code》若编程语言足够有表达力,或者咱们长于用这些语言来表白用意,那么咱们就不那么须要正文,甚至基本不须要。

程序猿说要有代码,于是代码和正文就一起诞生了。有一句名言,每个程序员都会厌恶两件事件,浏览没有正文的代码,给代码写正文。

毕竟,人与人的悲欢并不相同,我只感觉你写的代码一团糟。如何一次解决程序猿的两大难题,不必写正文,也不会被别人吐槽没有正文呢?为什么要缩小代码中的正文量呢?

  • 正文的存在阐明以后的这段代码逻辑并不是特地清晰,没有额定阐明,别人就可能无奈了解用意。
  • 正文很难失去保护,一个工作开发完结后,散布在工作中的正文大概率就不会再被更新,随着工夫的推移,代码越来越简单,可能正文的信息早已不能精确反馈以后的逻辑了。
  • 缩小正文的过程也是一个从新扫视代码构造,精简代码的过程。

那么蹩脚的正文有哪些,又有什么方法能够干掉这些正文呢?1. 废话式正文后端不能信赖前端传入的任何信息,所以写代码的时候,也不能信赖旁边同学的任何能力。哪怕最简略的操作,也要减少一段正文来阐明操作的细节。

public void addInfo(Info info){
  ...
  // 向信息列表中追加信息内容
  this.infoList.add(info);
  ...
}

置信你的同学的能力,常见的操作,即便没有正文,也可能通过上下文了解出你的用意的。

2. 絮絮叨叨的正文代码逻辑太绕,为了避免它变成上帝的小机密,那就写上一段正文,这样就不会变成上帝的小机密了。

public void addInfos(List<Info> infos){
  ...
  // 如果 Infos 没有,就间接返回,如果 Infos 只有一个,那就删除数据库的信息,再写入。。。...
}

看似有了正文,再也不放心变成上帝的小机密了。然而一旦离正文较远的大量代码被批改,则会导致上帝从新独享这段代码的机密。

“Comments Do Not Make Up for Bad Code”
— Robert C.Martin《Clean Code》
正文并不能优化蹩脚的代码

简单的正文阐明可能自身代码的逻辑是可能有问题的,整顿逻辑图并从新梳理状态机的模型,可能比写出简单的正文更有意义。从右边的七种可能的通路,多种执行的策略,到左边的清晰简略的二级判断 + 执行流程,状态及变动清晰简略。

3. 代替代码分层的正文

开发框架考究高内聚,松耦合。所以我的函数也要高内聚,能写在一起的函数,坚定不离开成多块的函数。为了防止有人了解不了这段代码的逻辑,那就加上正文好了。

// 判断是否沉闷用户
if((customer.getLastLoginTime().after(dateUtils.minusDays(new Date(),15)) && customer.getCommentsLast30Days() > 5) 
    || orderService.countRecentDaysByCustomer(customer,30) > 1)

不合理的分层一方面减少了多余的正文,而且也让整个代码维护性变高。如果判断沉闷用户的逻辑发生变化,岂不是须要 Ctrl+ F 去查找全文,一旦漏了一个中央,bug 就由此产生了。

正当的函数抽提能够增强代码的逻辑性,与其看见简单的布尔计算,isXXX 才是我的最爱。

private boolean isActivate(){return getLastLoginTime().after(dateUtils.minusDays(new Date(),15)) && getCommentsLast30Days() > 5) 
    || orderService.countRecentDaysByCustomer(this, 30) > 1)
}

if (customer.isActive()){...}

4. 不知所云的正文

为了让上帝更快的独享代码的机密,所以连正文也疾速投奔了上帝机密的怀抱。

public synchronized void setFormatter(Formatter newFormatter) {checkPermission();
    // 查看是否空指针
    newFormatter.getClass();
    formatter = newFormatter;
}

这儿的正文,看起来无论如何都不能和前面的代码所分割起来。然而 java 提供的函数 Objects.requireNonNull() 可能比作者应用的的 getClass 办法更加清晰的阐明查看空指针的用意,同时也能干掉这种不知所云的代码。与之类似的还有 Collections、StringUtils 上面的一系列函数。

尽管后面吐槽了这么多蹩脚的正文,以及针对这些正文的无正文办法,然而正如 ChatGPT 的答复:

写出没有正文的代码是一项挑战,因为正文能够帮忙读者了解代码的目标和工作原理。以下是一些编写没有正文的代码的倡议:
1. 放弃代码简洁:简洁的代码易于了解,使其更容易浏览和了解。
2. 应用描述性的名称:应用描述性的变量和函数名能够帮忙读者了解代码的目标。
3. 遵循统一的编码格调:应用统一的缩进、空格和命名约定能够使代码更加易于浏览。
4. 将代码分解成小块:将代码分解成小块能够帮忙读者了解代码的目标和性能。
5. 编写自描述的代码:编写自描述的代码能够帮忙读者了解代码的目标,例如,应用有意义的变量名和函数名。只管这些技巧可能会帮忙你编写更容易浏览的代码,然而正文依然是编写高质量代码的重要组成部分。当您必须编写没有正文的代码时,请尽可能遵循这些倡议。

尽管无正文的代码兴许终不可得,然而通过缩小正文,扫视咱们的代码构造,让代码晚一日成为上帝的小机密,那也是十分值得的啦。

作者|风篁

点击立刻收费试用云产品 开启云上实际之旅!

原文链接

本文为阿里云原创内容,未经容许不得转载。

退出移动版