如何编写整洁的代码?

如何编写整洁的代码?唯一有效的代码质量,度量公式:What-The-F**ks/Minute
 
—— Robert Martin


 
code-clean.jpg


Martin先生这样解释道:
 
当他进行代码审查时,头脑中会产生三个不一样的情绪。
 
·What-the-F ** k(好讨厌)— 不需要这段代码;
·What-the-F ** k(敬佩)— 这个写代码的家伙很聪明;
·What-the-F ** k(愤怒)— 简直没法理解这个人的代码。
 
当我们看到相关代码时,影响我们的第一件事是什么?
 
嗯,这是整洁干净的代码。
 
话虽这么说,我们常常讨论写代码,它和写文章和故事不是一码事,实际上写代码和创作故事很像,这遵循欧内斯特.海明威原则。
 
“任何一件事的初稿都不是完美的”。
 
大多数情况下,任何一篇文章的初稿都不是完美的。对于读者而言,不愿意看到一篇缺乏连贯的文章。同样,开发程序也是如此,大多数工程师最初的思维都不是那么清晰,代码语法也是混乱的组合。
 
但是,开发人员能够逃避这种问题,如果没有其它人阅读他的代码,那么这些代码将一直运行到不可维护为止,也就是说,直到有一天,另外一个人接手这些代码,开始尝试“破译”这段代码,如果没有成功,那么这段代码将陷入无法维护的噩梦。
 
这就是使用代码的重要性所在,是一种重要的“投资”。
 
编定整洁的代码如同是给建筑物打地基,投入的时间、金钱和精力越多,建筑物越牢固。有一天暴风来临时,这栋建筑物将更持久耐用,而那些地基并不牢靠的将有坍塌的风险。
 
整洁的代码能在几个月内收回成本(这些也取决于业务与解决方案的规模)。易于理解的代码能够更清楚无误的表达其目的,错误也会相应减少。
 
编写整洁代码是程序员必要的思维方式,编写整洁,结构化的代码需要刻意练习,不断实践。我们需要时刻以这种心态开始,把检查和修改代码作为一种习惯,让它成为最整洁的代码。
 
我们来讨论一下编写整洁代码的几个技巧。
 
命名的奥秘
 
如果我要讲一个真实的故事,就从名字开始。
—— Kendrick Lamar
 
名字在软件中无处不在。我们要对函数、类、变量、参数,软件包等都要起名,包括源文件、目录等,需要我们不断的命名,它是我们整洁代码最重要的关键,也是一个摆在我们眼前的障碍物。
 
名字应该显式命名,虽然取一个好名字要花时间,但是会节省很多钱。因此,请一定起好名字,甚至在完成开发之前更换合适的名字,后面阅读你代码的人也会感谢你。
 
请记住,任何的变量,函数或类的名字都应能够回答三大问题,它为什么存在,它的的功能和用途是什么。
 
这不但需要开发者有良好的描述能力,而且要有跨国界的文化理解,只有自己能够让这件事做得最好。
 
只做一件事的函数
 
形式遵循功能。
 
每个系统都是根据指定领域的语言开发的,而语言是由程序员写的,需要怡当的描述。函数在语言中使用动词,而类使用名词。
 
函数是任意一个编程语言的基本功,是编写好代码的本质。
 
编写整洁函数的两个黄金法则:
 
1)函数应该很小
2)函数只完成并做好一件事
 
函数中不应该有嵌套等语法结构,即函数的缩进级别不应该大于一个或两个。这种好处就是容易阅读,理解消化更加容易。除此以外,我们还需要确保函数中的语句是相同的抽象级别。
 
在函数中混入抽象逻辑会造成混乱,在时间延展中会导致代码无法管理。
 
优秀的程序员将函数视为要讲的故事,而不是要编写的代码。他们使用相关的编程语言来构建功能更丰富,更具表现力,更简洁的代码段,是理想中讲故事的人。
 
注释并不能弥补错误
 
每个人都能写自己的注释,这就是谣言的开始。
—— Venus Williams
 
注释是一把双刃剑,放在合适位置的注释才有用。另一方面,没有什么比浪费时间,写无用的注释更让人混乱,没有比散布虚假信息和谎言的注释更具有破坏力。
 
简而言之,注释虽然不可少,但大多数时候并不是总如此。
 
注释越陈旧,维护代码就越困难,大多数程序员都不会因代码优化而修改原注释,代码不断积累,代码段也开始移动变换,而注释从不变化,这将成为更大的问题。
 
请记住,清晰且精的注释加上表现力强的代码远胜于大量混乱注释且复杂的代码。
 
不要浪费时间来给已经混乱的代码加注释,而是花时间来清理混乱。
 
代码格式是第一要务
 
代码格式与沟通有关,而沟通是专业开发人员的首要任务。
 
沟通是优秀开发人员的最重要特征之一,代码格式化已经深印在脑海中。我们也希望人们对我们的秩序,细节关注和清晰的思想印象深刻,反之会破坏我们开发者的声誉。
 
如果你认为让它正常工作是开发人员的第一要务,那么你就无法远离事实。你今天创建的函数很有可能在下一版本中进行更改,但是代码的可读性问题是永恒的课题。
 
源码的风格与可读性将持续影响代码的可维护性。
 
开发者的编码风格和规则将会被人们记住,当格式形成一致性时,团队成员也会受此规则的约束,形成良好的代码文化。
 
写好try-catch-finally语句
 
虽然“人非圣贤”,但我们不能坚持错误。
 
错误处理是程序员必做事项,因为输入可能有异常,设备可能出现故障。作为开发者,需要确保代码完成预期的工作,还要解决未知的错误,问题和错误还要清晰易读,容易处理。
 
在实际工程中,有的人写的是以错误处理来引导的,这样让事情变得分散,以至于把代码的目标和逻辑搞分散了。
 
如果发生这种情况,那是出现错误了。代码一定是整洁、健壮,能够宽容例外并能够强壮的处理错误,这是一位软件工匠应该有的素质。
 
另外一种方法是通过正确的封装,来捕获try-catch中的错误。当try部分代码执行时,可以手动中止,然后在catch处恢复运行。
 
因此在写程序时,使用try-catch-finally是个好习惯。我们要始终记住,抛出的每个异常都应该包含足够丰富的上下文,以确定错误的来源和位置。
 
小结
 
通过编写整洁的代码,获得“干净”的感觉来规范无数的小技巧,这些小技巧称为代码感知。
 
有的人天生就有,有的人需要系统的训练,坚持不懈的毅力来拿到它。这些代码编写意识,在帮助我们区分好代码和坏代码时,能够很快将坏代码优化为整洁美观的代码,形成策略和习惯。
 
具有代码意识的程序员就是画家,人们能够将黑板报转换为精美的工艺品。
 
我们编写的程序是给人来阅读的,只是偶然让机器执行。
 
 
 

作者:老夏
来源:21CTO


扫一扫,在手机阅读、分享本文

0
分享 2020-01-29

0 个评论

要回复文章请先登录注册