什么是代码整洁?
正如Uncle Bob在《Clean Code》一书中所说:
对于整洁代码的定义可能和程序员的数量一样多。(There are probably as many definitions of Clean Code as there are programmers.)
定义整洁代码既主观又客观。整洁代码可以根据技术栈、领域和公司标准而异。在我的日常工作中,我主要使用Rust、C#和JavaScript。在Rust中被认为是整洁的代码,在C#或JavaScript中可能并不整洁。
然而,整洁代码有一些与语言无关的基本原则。这是跨语言共享的一个共同点。让我们探讨我认为描述整洁代码的七个要素:
1. 整洁代码解决问题
你可以创建地球上最优雅制作的软件,但如果不能解决业务问题,那就不是干净的。整洁代码应以最有效的方式解决问题域。 软件的目标是让客户满意。整洁代码只是一个手段:实现客户成功的手段。
2. 整洁代码就像一篇精心写就的散文
整洁代码读起来像精心写就的散文。易于理解且令人愉快。名称透露意图。流程简单。整洁代码讲述一个故事。 它具有描述性的命名、适当的格式和应用适当的设计模式。这简化了开发者之间的沟通,使代码更易阅读。
在代码结构方面,整洁代码就像一个井然有序的房间;每样东西都有其位置,易于找到所需之物。当我们查看代码结构时,它应该清晰地展现出领域。它应该突显我们应用程序的目的。通过清晰的领域分隔,易于导航。整洁代码具有清晰的架构,表达它解决的问题。
3. 整洁代码是简单的
软件的最佳设计是最简单的设计,只要能够正常工作。作者看起来并不聪明。代码看起来很简单,但你可以看出作者在努力。 简单的代码是乏味的代码。
当没有更多内容可添加时,你的代码不是整洁的。当没有更多可拿掉的时候,你的代码才是整洁的。
整洁代码也需要简单的测试。测试应具有与生产代码相似的质量标准。只有拥有整洁的测试,才能拥有整洁的代码。测试应被视为一等公民。
4. 整洁代码易于改进
有人说整洁代码易于更改。易于更改是一个糟糕的指标。整洁代码不是指它有多容易更改。它是指它有多容易改进。 更改代码的容易性并不能清晰地定义代码有多干净。更改代码总是容易的。改进代码可能很难。
例如,考虑删除一行代码或重命名一个变量。这些都是易于执行的操作。任何人都可以做到,甚至是我的侄子。真正的问题是这些操作是否改进了系统。只有在具有高质量测试套件作为安全网的情况下,删除一行代码才容易。只有在有良好命名的软件元素作为参考的情况下,重命名变量才容易。整洁代码使改进变得更容易,因为上下文支持它们。 当改进变得容易时,你的代码才是整洁的。
5. 整洁代码是经过测试的
整洁代码对更改是无风险的。降低风险的最佳方法是拥有高质量的自动化测试。测试是应用程序最重要的组成部分之一。它们是对代码的编码知识:
它们告诉代码是否有效
它们展示代码的工作原理
它们揭示代码应该做什么
它们记录业务知识
如果没有测试支持更改,那么拥有整洁的生产代码是无关紧要的。随着时间的推移,代码往往变得更加复杂。我们测试的主要作用是支持更改和积极的重构。只有通过实践持续重构,才能编写整洁的代码并保持它。
6. 整洁代码专注于问题,而不是解决方案
整洁代码讲述它解决的问题的故事。如果你的命名包含很多技术术语,那么它可能专注于“怎么做”。整洁代码关注“做什么”。诸如DTOs、标志和记录之类的技术名称都与计算机上的特定解决方案相关。它们是代码异味,表明你的代码专注于解决方案空间。相反,你应该编写关于问题的代码。
7. 如果整个团队都同意,那么代码是干净的
整洁代码不是由个人偏好定义的。相反,它是一个集体努力,团队中每个人的共识都很重要。当团队中的每个人都认为它是干净的时候,整洁代码才是干净的。 他们分享对高质量代码含义的共同理解。这种共识促进了一致性。团队对代码具有集体所有权,每个人都遵循相同的编码标准。整洁代码是团队的努力。
结论
毕竟,整洁代码不是绝对的概念;它是相对的。然而,有一种无论你的技术或团队如何都能衡量代码整洁程度的普遍做法:
你只需要计算每分钟的WTFs数量。