如何定义“好”代码

1.常用标准

好这个字太抽象,没办法直接用来衡量代码。 必须找几个稍微具体的次。 这类词有很多。比如:灵活性、可扩展性、可维护性、可读性、可理解性、易修改性、可复用性、可测试性、模块化、高内聚低耦合、高效、高性能、安全性、兼容性、易用性、整洁、清晰、简单、直接、少即是多、文档详尽、分层清晰、正确性、健壮性、鲁棒性、可用性、可伸缩性、稳定性、优雅……

其实衡量代码的词,大致可以归归类。 有的词过于笼统、抽象, 比较偏向于整体的描述, 比如:优雅、好、坏、整洁、清晰等。 有的过于细节、偏重方法论, 比如模块化、高内聚低耦合、文档详尽、分层清晰等。 有的可能不仅仅限于编码本身, 跟架构设计也有关系, 比如:可伸缩性、可用性、稳定性等。

为了便于学习,我们抽取比较中间的词。其实这些词也是最常用的、最重要的衡量好坏标准的词:可维护性、可读性、可扩展性、灵活性、简洁性、可复用性、可测试性。

2. 可维护性

讨论可维护性, 首先我们需要知道,维护代码都需要做哪些事儿。其实维护代码就是:修改BUG、修改老代码、添加新特性之类的工作。所以, “代码易维护”就是指:在不破坏原有代码的设计、不引入新BUG的情况下,能够快速修改或者添加代码。所谓“代码不易维护”就是指,修改或者添加代码需要冒极大的引入新BUG的风险,并且需要花很长的时间才能完成。

我们知道,对于一个项目来讲,维护代码的时间远远大于编写代码的时间。工程师大部分的时间可能都花在修修BUG,改改老代码的功能逻辑, 添加一些新的功能逻辑的工作上。 所以代码的可维护性就格外重要。

其实,可维护性还是比较抽象的一个词。影响代码可维护性的因素挺多。 代码的可读性好、简洁、可扩展性好,就会使得代码易维护。 如果代码分层清晰、模块化好、高内聚低耦合、面向接口编程等,也就意味着代码易维护。
除此之外, 易维护性还跟项目的代码量多少、业务的复杂性、利用到的技术的复杂程度、文档是否全面、团队成员的开发水平等因素有关。

所以正面去分析一个代码是否易维护比较有难度。我们可以从侧面给出一个主观但又比较准确的感受。 如果BUG容易修复,修改、新增功能能轻松完成,那我们就主观的认为代码对我们来讲是易维护的。 相反:如果修改一个BUG,修改、添加一个功能,需要花费很长的时间,很容易引入新的BUG。 那我们就主观的认为,这个代码对我们来讲是不易维护的。

2. 可读性

软件设计大师 Martin Fowler曾经说过:“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
代码的可读性是评价代码质量最重要的指标之一。 我们在编写代码的时候,要时刻考虑代码是否易读、易理解。 可读性是其它特性的基础, 失去了可读性, 那就谈不上易维护了。
如何评价一段代码是否满足可读性呢? 我们需要看代码是否符合编码规范、命名是否注意、注释是否详尽、是否满足高内聚低耦合等等。 你可能也感受到了,正面描述一个代码是否满足可读性也很难。 实际上 code review 是很好的测验代码可读性的手段。 看看 code review 的人能不能轻松读完这部分代码, 还是会不停的说:“TMD, 居然这样写”。

3. 可扩展性

可扩展性也是一个评价代码质量非常重要的标准。它表示我们的代码应对未来需求变化的能力。跟可读性一样,代码是否易扩展也很大程度上决定代码是否易维护。
代码的可扩展性表示,我们在不改变或少量改变原有代码的情况下,通过扩展的方式添加新的功能代码。说直白点,代码预留了一些功能扩展点,你可以吧新功能代码,直接插到扩展点上,而不需要因为要添加一个功能而大动干戈,改动大量的原始代码。

4. 灵活性

灵活性是比较抽象的一个词,不太好一句话下定义。下面只能举几个场景。
(1)当我们添加一个新的功能代码的时候,原有的代码已经预留好了扩展点,我们不需要修改原有的代码,只要在扩展点上添加新的代码即可。这一点,其实和可扩展性是一样的。
(2)当我们要实现一个功能的时候,发现原有代码中,已经抽象出了很多底层可以复用的模块、类等代码,我们可以拿来直接使用。这个时候,我们除了可以说代码易复用外,还可以说代码写得灵活。
(3)当我们使用某组接口的时候,如果这组接口可以应对各种使用场景,满足各种不同的需求,我们除了可以说接口易用之外,还可以说这个接口设计的灵活。

5. 简洁性

有一条非常著名的设计原则,KISS:Keep It Simple, Stupid. 这个原则说的意思就是,尽量保持代码简单。代码简单、逻辑清晰,也就意味着易读、易维护。
思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题。 这也是编程老手跟编程新手的本质区别之一。

6. 可复用性

可复用性可以简单的理解为,尽量减少重复代码,复用已有的代码。 继承、多态的一个目的就是为了提高代码的可复用性。很多的设计原则、设计模式都是为了减少重复,增加复用性。代码的可复用性跟DRY(Don’t Repeat Yourself)关系很紧密。

7. 可测试性

代码是否容易写单元测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值