注意!注意!想要作为优秀的程序员必须遵守一些不成文的规定。本文不是在讨论算法、数据结构、软件架构和程序设计,而是在讨论一些更基本、更重要的东西:可读性。
源代码是程序员耗尽了心血和精力的作品,所以不应当存在“快刀斩乱麻”的现象。忽视这些规定看似让代码生成速度加快,但事实上往往导致事倍功半。
代码敲一次,阅读无数次。因此,优化代码提高可读性显得尤为重要。为了帮助生成高度可读的代码,本文归纳总结了必须遵守的3个重要规定。遵循这些规则可以帮助使用代码的人员维护、扩展和调整代码。此外,可读性高的代码更不容易出错。
这三个技巧最好的地方在于:可以立即实现。不需要训练时间。仅仅需要几分钟就能蜕变成更优秀的程序员!
使用描述性的变量和函数名
程序代码往往包含上千单词。当然,也有篇幅较短的代码。使用自解释变量和函数名使代码更容易阅读、理解、维护和后续扩展。举个例子:
在编写这段代码时,开发人员确切地知道要实现的是哪种功能。但是,其他人能理解吗?这就要看灵感和缘分了。开发人员可以添加一条注释来描述这段代码的用途,但是使用描述性变量名能够更直观地告诉读者相关信息,比如:
看!现在是不是更容易理解了。仅通过使用描述性变量名,读者就可以立即了解该代码能将华氏温度(Fahrenheit)转换为摄氏温度(Celsius)。现在定义一个函数实现上述代码功能,并观察根据函数名和参数名对可读性的影响程度。
“简短”版:
“细节补充”版:
很明显:比起只用单个字母表示变量和函数名的“简短”版,“细节补充”版需要花费更多的打字时间。
但是,理解这两个版本的代码又需要多长时间呢? 自解释代码不仅为读者节省了许多理解代码的时间,同时也为开发人员节省大量时间。为了更改程序细节或者编写拓展程序,开发人员经常需要回顾数月前编写的代码。然后就一脸懵的看着屏幕:“我滴个神啊,我都写了啥?任何可以优化阅读性的方法都值得付出额外的打字时间。
使用适当的缩进
因为Guido van Rossum 决定在他设计的Python编程语言中强制执行缩进,所以使用Python进行编程的读者可以跳过本节。
如果使用的是如C、C++、Java、JavaScript、PHP、C#、PHP等其他受众良多的编程语言,那么牢记这条技巧:
按层次缩进代码。
可以使用制表符或者空格,空格按3次或者按4次也可按照开发人员的喜好而定。只要记住缩进在编程中是必须的就OK了。接下来通过比较一些JavaScript代码来进一步说明。这段代码:
- 将100至110华氏度换算成相应摄氏度。
- 将转换后的值四舍五入至个位(使数据变为整数)。
- 将所有偶数摄氏度值输出到控制台(这是通过使用模数运算符”%”完成的,该操作符返回整数除法的余数。因此,11% 2 =1,12% 2 = 0)
没有缩进的版本:
有缩进的版本:
代码中还添加了一些空白行来进一步结构化代码。这两段代码中哪个的可读性更高呢?
恰当地使用函数
通过使用函数可以构建可重复使用的代码块。这些还可以使代码更结构化、更具可读性和可理解性。能够避免重复的代码是函数最重要的特性。
定义函数(或类、模块等等,这取决于使用哪种编程语言)可以解决在代码库中多次出现相同的代码段的冗杂状态。下述示例就是很好的示范:
上述代码输出华氏度数值和相应的摄氏度数值。很明显,上述代码存在重复性代码段,这种情况下创建一个函数就可以更快速地完成上述功能:
更清爽对吧!代码看起来更干净、更简洁。而且,它比前一个示例更具描述性。那个公式只会在定义ConvertAndPrint函数时出现一次。如果只是想把华氏度转换成摄氏度但是不显示这些数据呢?可以通过定义不同的函数来实现:
有木有!这种方法构建了含有自解释代码的构建块,以便在不同的程序设计段中以多种方式重复调用这些构建块。
到这就结束了?No!
还是有的地方代码重复性很高啊。PrintFahrenheitAndCelsius 函数需要输入4个值。那么只想转换3个值的时候怎么办呢?想转换300个值的时候又该怎么办呢?当然有一个更好的方法!
根据使用的编程语言不同,抽象化函数的参数数量的方法可能不太一样。但是,大多数开发人员会通过使用容器(如矩阵或者List)解决这个问题。
最后的改变使函数更优越:
- 它更短,更容易阅读,
- 限制更少,更加通用。
结语
遵循一些简单的规定(规范化指导)能使源代码将更容易阅读(从而进一步理解、维护和扩展)。
同时,使用函数(或者其他编程语言的任何抽象方法)来创建可重复调用的构建块,抽象化参数使代码限制更少、适用范围增大。
对函数和变量恰当地重新命名可以增加源代码的可读性。就像读故事一样清晰、简单、容易理解。
使用这三个技巧,手中的代码将宛若重获新生,熠熠生辉。