为什么不同时?
首先,“描述性”和“冗长”是不同的。例如,如果您正在编写一个相当本地的循环,i
则该循环变量的变量名非常好;current_iteration_index
,虽然可以说更具描述性,而且肯定更冗长,但更糟,根本不添加任何信息,因为使用i
as作为循环变量已被广泛接受,除此之外没有其他含义i
。
好的变量名具有描述性,因为程序员熟悉该语言的习惯用法和代码库的约定,可以轻松猜测它们的作用,但是它们也足够简洁,可以使事情紧凑。
80个字符的限制最初是1970年文本终端的技术限制的结果,但今天仍然被许多人重视,尽管仍然有技术上的原因(某些网络协议中最大的行长,尤其是与电子邮件相关),更令人信服的原因是心理和社会原因。事实证明,围绕66个字符标记的行长为自然语言散文提供了最舒适的阅读体验(有趣的是,字体大小并没有多大区别,因此屏幕或纸张大小也没有太大区别);80个字符的行限制非常接近此限制,但是由于典型代码段的缩进通常至少缩进一个或两个级别(这取决于缩进设置,因此介于4到16个字符之间),
坚持使用80个字符的行的另一个效果是,它可以很好地指示事情太复杂了。较长的行通常是由以下原因之一引起的:
- 具有一长串参数的函数;这不是一件好事,因为它们会妨碍可读性,并且容易引起细微的错误,例如,当人们以编译器无法捕获的方式交换参数顺序时。
- 复杂表达式,通常在条件(例如
if ((user.isLoggedIn && user.hasPermission(page.getRequiredPermission()) && !user.isBanned) || page.getRequiredPermission() == null)
)中发现;这通常也很难解密,因此应该将代码重写为更结构化的内容。该表达式最有可能执行过多操作,应将其分解为方法或函数。
- 函数调用或表达式中使用的长文字,例如
print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));
。将文字移到变量或常量中;它可能仍会超出行的长度,但是如果您始终如一地进行操作,那么读者可以至少安全地忽略该行的不可见部分,前提是仅遵循其余部分。或者更好的是,将文字移出代码并移至外部数据存储(文件,数据库等)中。
- 深度嵌套的语句,例如
if
,类方法中的六级语句(典型设置为32列缩进)。同样,深层嵌套会导致复杂且难以阅读的代码,应避免像瘟疫一样避免使用-简而言之,深层嵌套会在读取时溢出人脑。
从长远来看,所有这些最终都会成为您宁愿在代码库中所没有的事物的症状,并且强制执行80个字符的限制是一种很好的简单方法,有助于降低复杂性和提高可读性。(这并不是说您不能在80列中编写完全不可读的代码:各种混淆代码竞赛是明显的反例)。