程序员@IT·互联网首页投稿(暂停使用,暂停投稿)

书写清晰代码的10个要点

2016-08-03  本文已影响1016人  coolspider2015

原文链接:Tips for Writing Cleaner & Better Code

毫无疑问,编程是一个辛苦的工作。编程是一件关于学习语言和算法的工作,但它更是一个怪兽,试图编写一个复杂的能够工作的应用程序,这项工作让你目不转睛,不想离开。
书写清晰的代码就像绘画、烹饪和摄影,他们好像看起来比实际更容易。为什么我们要在乎书写清晰的代码呢?那是因为它的好处让我们值得去做。

以下是关于如何写出清晰代码的10点提示。

1.使用描述性的名称
什么是变量,类和函数?有很多种方式回答这个问题,但是当你真正思考这个问题时,它们无非是程序员和应用背后逻辑之间的交互和连接。因此当你使用不清楚的、不可描述的变量、类和函数名称时,你实际上是在模糊阅读代码的程序员(包括你自己)的逻辑。

我不是一个伟大的程序员,我只是一个具有伟大习惯的好程序员。-Kent Beck

如果一个变量名是dxy,这是什么意思?没人知道。你也许需要阅读整段的代码来反推变量的含义。相反,如果一个变量是disanceBetweenXY,那么它的意义就非常容易知晓了。同样的道理适用于类和函数。当你想要用CalculateTangent()时,就请不要用CalcTan()或者CalcTangentAngle()。

2.让每个类/方法具有唯一目的
你曾经遇到过一个函数有成百上千行吗?如果有,你就会知道浏览、理解和编辑它是一件多么痛苦的事情。实际上,一个复杂的计算,例如GetCreditScore(),可能需要分解成几个辅助的函数,例如GetCreditReports(), ApplyCreditHistoryAge(), and FilterOutstandingMarks().

3.删除不必要的代码
我有一个一直与之斗争的坏习惯。一般是这样的:我想要修复和优化一段代码,所以我会注释掉它,然后在其下边重写。即便新的代码可以工作,我还是会保留旧的代码以防万一。随着时间的流逝,我累积了相当多这样的注释掉的代码,这些代码不在需要,但是会扰乱我的源代码。很讽刺的是:注释掉代码上下的代码已经发生了很大变化,注释掉的代码即便恢复也不可能再发挥作用了。这种注释掉备份代码的方法可以被“源控制”取代。如果你还没有开始使用Git或者Mercurial,你现在就需要开始使用“源控制”了,清晰的代码在等待着你。

4.可读性>小聪明
很多程序员把“清晰的代码”和“聪明的代码”混为一谈,好像把10行代码压缩成一行就是更简洁了。确实,在屏幕上它占用了更少的空间,但是实际上它更容易理解了吗?也许有时候是,但是大多都不是这样。程序员热爱“聪明的代码”是因为这就好像是一个解开的谜题。他们发现了特别又唯一的方法去完成一些事情,就好像快捷键一般,这似乎是程序员技术水平的象征。但是书写清晰的代码,需要把你的自负留在门外了。一定要保持优化你的代码让下一个人能够读懂,因为一般情况下下一个人实际上就是你自己。没有比无法懂得自己写的代码更加让人羞愧的事情了。

5.保持一致的编程风格
新手总是习得各种矛盾的习惯,尤其是编程风格。我不是说一种风格比另一种好。如果你偏好tabs胜于space,很好;如果你在方法声明前加空格,没问题。但是不管你做什么,请保持一致。如果你要用camelCaseNaming命名一个变量,就不要用underscore_naming,如果你在一个地方用GetThisObject(),就不要在别的地方用FetchThatObject()。如果你混用tabs和spaces,你就活该失去工作。当你决定了将使用哪种风格,一致保持下去。一些语言,例如Python和C#都具有通用的风格指导可以学习。

6.选择正确的架构
有许多不同的范式和架构用来创建你自己的项目。这个提示的要点是针对你自己的需求,选择正确的框架,不是选择最好的那个,因为没有做好的。

如果没有需求和设计,编程就是给一个空文档添加bugs的艺术。-Louis Srygley

比如说Model-View-Controller (MVC)模式是web开发中是非常流行的框架,因为它可以帮助让你的代码有组织性,让维护成本最小化。相似的,Entity-Component-System (ECS)模式在游戏开发中也非常流行,那是因为它可以帮助让游戏数据模块化,代码逻辑清晰,可读性强。

7.掌握语言的独有风格
掌握一门新语言的一个难点就是学习它与其他语言的区别开的细微差异。这种差异可以是丑陋、复杂和优美,易维护间的差异。想想Python、Java和JavaScript。他们彼此之间非常不同,在一定程度上根据你选择的语言,需要你有不同的思维方式。

如果一个语言无法影响你编程的思维,那么这个语言就不值得知晓。-Alan J. Perlis

Python是紧凑编程和鸭子类型,Java更多是冗长和直接。每种语言都有自己的风格(例如Python中的列表解析),鼓励一种特定的编程方式,你要努力去学习它们。也有一些“反模式”值得担忧,那是一些非最优的设计模式,结果会产生无效的,不可靠的坏代码。了解和摒弃所有常见的与你语言相关的“反模式”。

8.学习专家的代码
如果你想书写清晰的代码,你最应该做的是去看清晰的代码长成什么样,同时去理解为什么是这样。最好的方法就是去研究学习工业专家的源代码。很显然,你不可能直接跑去微软总部去偷看他们的项目,但是你可以浏览名声在外的开源项目。不知道从哪里开始,可以试试GitHub上的一些项目。

傻瓜也可以写出让计算机理解的代码,但是好的程序员可以写出让人类理解的代码。—Matin Fowler

这就是开源项目存在的意义之一:让别人可以学习他们。如果你决定向一个项目贡献代码,这可以加速你学习编程的进度。我第一次真正看到清晰的代码是在我磕磕绊绊的学习一个业余爱好者的开源项目时。那些代码是那么的优雅以至于我都想放弃编程了,但是最终我从中学到了很多。

9.写出好的注释
“写好注释”是在编程世界中最古老的建议之一了。事实上,只要新手知道了写注释,他们就被鼓励尽可能的写注释。但是好像我们事与愿违了。新手通常是过度注释-描述不需要描述的东西,错过了什么才是好的注释。这里介绍一个好的注释标准:注释存在是为了解释为什么这段代码存在而不是这段代码做了什么。如果代码被写的足够清晰,它做了什么的是不言自明的。注释应该为代码的意图提供启示。注释可以作为警告,例如:移除这个会影响A,B,C,但是大多时候注释应该阐明不能直接从代码中读出的内容,例如:因为X,Y,Z所以才使用这个参数。

10.重构!重构!重构!
就像编辑是写作的一部分,重构就是编程的一部分。简而言之,重构就是清理代码,但是不影响其实际的行为。
一个编程技巧一直伴随我:不要给坏代码做注释,直接重写。当一段代码让你很困惑需要注释的时候,实际上你需要重写它了。
而且,当你在项目中这里那里修改时,一定要让你的代码比你第一次看到它时更好。在短时间内也许你觉得没什么影响,但是长远考虑,它值得你付出努力。

总有新东西要学习
一个程序员学习如何书写清晰的代码,就好比, 一个小说家学习如何写出清晰的散文。没有一个正确的方法去做这件事,有许多方式去做,需要花费几年的时间去成为专家。 一些人没有意识到它的重要性,最终放弃了编程。那没关系,因为有许多其他的技术工作不需要编程技能。但是对于其他人,清晰的代码绝对是你值得努力的方向,即使它要花费你的一生去获得。

上一篇下一篇

猜你喜欢

热点阅读