【译】什么才是优秀的代码

究竟什么是优秀的代码?Robert Martin的一句话能够完美诠释。 程序员

代码质量的惟一衡量标准是每分钟说多少次WTFweb

我来解释一下这句话。当我在作code review时,一般会有三种不一样的感觉:编程

  • What-the-F**k (厌恶脸) — 这段代码并非必要的
  • What-the-F**k (一脸钦佩) — 这家伙真聪明啊
  • What-the-F**k (愤怒值爆表) — 这什么垃圾玩意

因此当咱们看代码时影响咱们的第一印象的因素是什么呢?编程语言

这是一段整洁又漂亮的代码。svg

可以写出整洁又漂亮的代码是一个优秀工程师的标志。函数

It is Clean and Beautifully written code.工具

And writing clean and beautiful code is the mark of a GREAT softwarecraftsman.ui

要学会这项伟大的事业有两个关键点:知识和工做编码

知识会教给你如何在变得更加专业的模式、原则、实践和启发式的方法。但这些知识须要你经过大量的读写、不断的实践和努力才能得到。excel

简而言之,学会如何写整洁的代码并不是一件简单的事。你必需要为之付出努力,必须一次又一次的练习、发现问题、经历失败,直到正确处理为止。这一过程没有任何捷径。

下面我将向你介绍一些如何写出整洁且漂亮的代码的技巧。

“What is in a NAME”

Kendrick Lamar说过:

若是我要讲一个真实的故事,那么必定是从故事的命名开始。

If I’m gonna tell a real story, I’m gonna start with my name

命名会遍及代码的每个角落,咱们会为函数、类、参数、包等命名,还会为源文件、目录命名。总之,在写代码的过程当中,好的命名多是使代码变整洁的最重要的因素。

你的命名应该显示出你的意图。选择一个好的名称会耗费你的一些时间,可是若是随意命名,之后你会浪费更多的时间来理解它。因此请尽量使你的命名更加合理,读你的代码的人也会所以感谢你。

你要谨记的是,变量、函数和类的命名应该能回答三个问题:它为何存在、它是作什么的、它用在哪里。

这不只须要良好的描述能力,还须要了解跨国界的文化背景。要教会你这些,没有人能比你本身更合适了。

“Functions should DO ONLY ONE THING.”

咱们所说的「单一责任」原则。

Louis Sullivan对此有过完美的描述

形式跟随函数

Form follows function.

每一个系统都是由特定的编程语言构建而成。函数一般是动词,而类一般是名词。函数任何编程语言中一般都是出如今第一行,写出整洁代码的本质其实就是写出整洁的函数。

要想写出整洁的函数,首先应该遵循两条黄金法则:

  • 函数应该尽量短小
  • 函数应该只作一件事

这意味着你的函数不该该出现嵌套的结构。因此函数的缩进级别不该该大于一个或两个,这会让你的代码更容易阅读、理解和消化。除此以外,咱们还须要确保函数中的语句都处于同一抽象级别。

在一个函数中若是混有不一样的抽象级别一般会使代码变得十分混乱,而且难以管理。优秀的工程师会把函数看成给别人讲的一段故事,而不仅是编码。

他们一般使用所选编程语言的功能来构建更加丰富、更具表现力和更加简洁的代码块。这使他们成为更好的“故事讲述者”。

“Comments do not make up for bad code”

Venus Williams为咱们敲响警钟:

每一个人都有本身的注释,这是谣言的开始。

Everyone makes their own comments. That’s how rumors get started.

注释是一把双刃剑,在正确的位置添加注释能够为他人提供最有用的帮助。另外一方面,浪费空间来添加无用的注释会使代码更加的混乱。若是注释提供了错误的信息,那对代码来讲能够说是一种灾难了。

总之,注释是一种不可缺乏的恶魔。为何呢?一般,代码的注释越旧,维护起来就越困难。不少程序员由于修改代码时不维护注释而臭名昭著。

随着代码的发展,代码作出了许多改动,但注释并无随之修改,这是一个很大的问题。

请铭记,带有少许注释的简洁代码远胜于带有大量注释的混乱代码。不要浪费时间来解释你制造的混乱,而是要花些时间来清理这些混乱。

“Formatting Code is always a priority”

Robert C. Martin说过

代码格式与沟通有关,而沟通是专业开发人员的首要任务。

Code formatting is about communication, and communication is the professional developer’s first order of business.

上面的说法可能不被你们承认,但这是一个优秀的开发人员的最重要的品质。格式化的代码是你心灵的窗户,咱们但愿人们对咱们的秩序、对细节的关注和思想的清晰印象深入。当他人看代码时,若是看到的是混乱的、开头结尾不清晰的代码块,这会直接损害咱们的声誉,这一点毋庸置疑!

若是你认为代码“可使用”是专业程序员的第一要务,那么你不会有很好的发展的。你今天的功能颇有可能在下个版本进行更改,但代码的可读性是不会改变的。

当原始代码已经改的面目全非时,代码的风格和可读性将影响代码的可维护性。

之后,你会由于本身的代码风格和纪律被人们记住,而不会由于某段代码。所以,你须要注意你的代码格式,使它受到简单的规则约束,这样的规则必须是全部团队成员都能理解的。

Write your “try-catch-finally” statement first

Georges Canguilhem明确提到:

人类都会犯错误,可是坚持错误的倒是恶魔。

To err is human, to persist in error is diabolical.

错误处理是每一个程序员都必需要作的事情,输入可能异常,设备也可能故障。做为开发人员,咱们但愿程序按照咱们的预期来执行。然而,问题不是处理错误,而是清晰易读的错误处理方式。

不少代码以处理错误为主,致使主代码逻辑被淹没在其中。这种作法是彻底错误的。代码应该整洁、健壮,而且以一种优雅的方式处理错误,这也是优秀工程师的一种标志。

其中一个错误处理方法是经过适当的try-catch代码块来捕获全部错误。在执行try-catch-finally中try部分的代码时,任什么时候间发生异常,都会进入catch部分执行。

所以,在代码中使用try-catch-finally多是一种比较好的选择。它能帮助你在try部分定义你但愿执行的代码,而不用去担忧代码出错时怎么办。

你抛出的每个异常都应该具备完整的上下文以肯定错误的来源和位置。具备创造性的错误信息会在代码写出来后好久,甚至是做者已经离开很长时间后仍然被人们记住。

Bringing it all together

那么如何综合一下上面提到的技巧呢?

答案是代码意识,是软件工程中的一种常识。

The answer is code-sense; the software equivalent of common sense.

据Robert Martin所说,”编写整洁的代码须要经过一段痛苦的过程来得到一些小技巧,这些小技巧被称为代码意识“。有些人天生就有这种感受,而有些人则须要经过实践、坚持不懈和毅力来获取它。这种意识不只仅是帮助咱们区分好代码和坏代码,更可以给咱们代码将坏代码转换成好代码的能力。

代码意识能够帮助开发者们选择最好的工具来指导他们创造出更有价值的整洁又漂亮的代码。

简而言之,具备代码意识到程序员就像是画家,他能够将一块空白的屏幕变成精美的艺术品,并被人们记住很长时间。

就像Harold Abelson所说的同样:

代码写出来首先是给人读的,而后才是指导机器要怎么作。

References

“A handbook of Agile Software Craftsmanship” — Robert Martin.

“A handbook of Agile estimation” — Mike Cohn

原文地址

https://medium.com/swlh/excellent-code-clean-and-beautiful-code-b541ca4b5a39

译者点评

这位做者以一种比较激进的语言告诉你们要注意代码的可读性,不过你们的观点都很相似,无非就是命名、代码格式、注释和错误处理这些点。但愿这篇有些激进的文章能够帮助到一些同窗,减小别人在review你的代码时,使用WTF的次数。