描述性命名与80个字符行的比较[关闭]


17

我经常听到这两种有价值的编程实践:(1)代码行应少于80个字符,并且(2)为变量,方法,类等使用描述性名称。我理解这两个建议的含义,它们似乎常常是彼此权衡的。如果我将代码的字符数保持在80个字符/行以下,那么最终我将使用较少的描述性名称(特别是在Python中,每个缩进均计为4个字符),但如果使用的描述性名称较多,则最终将使用80个字符以上的行。

因此,我的问题是,如果必须做出选择,那么遵循这两个建议中哪个更重要?我想作为一个独立的(业余爱好者)程序员来这件事,但更重要的是,从一个为大公司工作的软件工程师的角度来看。


4
@BillyONeal随着大屏幕,120 :)
BЈовић

4
我认为我至少需要130
9dan 2013年

8
我更喜欢80,因为这样我就可以轻松地在笔记本电脑上并排打开2个文件。
Honza Brabec

5
超过80个字符的行往往变得不可读。因此80是一个很好的限制。描述性不必太冗长。它取决于范围:小范围的短变量名,大范围的长名称。并且一定要避免使用范围较大的变量。如果您使用它,请使用一种功能语言,并在缩进得太深时将代码分成较小的功能->很小的作用域==简短的变量名。函数名称相似,但通常会更长一些,因为它们的范围更大。
Peer Stritzinger

4
@ ott--:您是否看过一个编辑器,根据C ++语法,它实际上可以折断很长的一行,并且显示的缩进比起首个缩进了一层?否则,这种建议是没有用的。
Jan Hudec

Answers:


34

缩进要少,名字要有描述性,不要害怕换行。

减少缩进量。

通常,当我发现自己在缩进与描述性命名之间处于挣扎状态时,我会退后一步查看缩进级别。如果缩进量超过3或4个级别(在许多情况下自动缩进2个级别是不可避免的,请阅读:类方法定义),则可能需要重组代码,将功能抽象为一个函数或方法。

您的名字具有描述性

您应该始终保持名称具有描述性。描述性名称创建自记录代码。在某些情况下,您可以尝试缩短名称,但可读性优先。

不要害怕打破界限

该死。如果您超过80个字符,但您仍然看不到要回收该行中的任何空格,请将其断开。大多数语言都不关心换行符,因此请将换行符分成多个。不要只是随机选择一个位置。保持逻辑上的分组,并在断行时缩进另一个层次。


3
应该注意的是,描述性名称与长名称不同。避免重复从上下文容易看到的事物和少数精心选择的缩写(仅适用于非常常见的概念),对于使用简短的描述性名称会大有帮助
Jan Hudec

18

为什么不同时?

首先,“描述性”和“冗长”是不同的。例如,如果您正在编写一个相当本地的循环,i则该循环变量的变量名非常好;current_iteration_index,虽然可以说更具描述性,而且肯定更冗长,但更糟,根本不添加任何信息,因为使用ias作为循环变量已被广泛接受,除此之外没有其他含义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列中编写完全不可读的代码:各种混淆代码竞赛是明显的反例)。


1
+1:很好的答案,除了我不同意将文字从代码中移开。当您知道要查找的文字时,可以在资源或代码中对它进行grep表示,但是当您使用代码并需要修改文字时,不得不在单独的文件中寻找它是一件很分散的事情。还要注意,所有语言都有某种将文字拆分为多行的方式,这就是我在这种情况下要做的。
Jan Hudec

当然,用作长文字示例的句子在源代码中没有地位。这样的事情在页面模板中。但是对于诸如错误消息之类的事情,我更喜欢将它们与发出它们的代码保持在一起。
Jan Hudec

@JanHudec:当然,将文字移动到数据文件并不总是很有意义。不过,我在谈论的字面量过长,因此,我很少见到在其他地方定义它们会使代码更糟的情况:文本的长度对阅读造成干扰,而其含义很容易压缩为常量或变量名,然后在其他位置定义。我想错误消息是一个判断电话。
tdammers

16

FAR的描述性命名更为重要。在大多数界面中,我们可以滚动查看更长的行。在任何情况下,系统都不能帮助您转换名称错误的变量和函数。


2
这个。停止在X字符上换行,让IDE处理。否则您会打扰所有其他用户(包括将来的您!),他们的屏幕/ IDE可以使用不再适合一页的代码来处理2 * X字符。
Konerak

4
这个问题隐含地是关于名的。而且我不同意名字应该长-在大多数情况下,名字应该。具有描述性的长名称比具有较少描述性但较短的名称使代码难以阅读!(过长的行通常很难看清。)
Konrad Rudolph

4
我不同意。如果我一次看不到代码,那么无论名称如何描述,都很难阅读。
Jan Hudec

4

即使命名很长,每行80个字符也不难满足,因为有很多方法可以将长代码的一行分解为多个短代码,例如,我可以将C中的条件语句分解为多行以容纳少于40个字符字符,

if ( a == b || c == d  || d == e
    || c == e || c == a || c == k
    || c == l)

您还可以将函数调用的行也分成多行。

因此,描述性命名规则和80个字符行都没有矛盾,它们可以共存以提高可读性。


2
80个字符真的可以提高可读性吗?这些天什么屏幕不能轻易地做120?
Billy ONeal

7
@BillyONeal,扫描80宽度比扫描120宽度更容易
棘轮怪胎

2
该报纸闯入列,你可以从UX更多信息ux.stackexchange.com/questions/3618/...

1
当换行符对应于条件的结构时,打破逻辑条件可以提高可读性,但是如果换行符仅对应于任意限制,则不必这样做。
mikołak

1
@BillyONeal:大多数屏幕可以做到120,但几乎没有任何屏幕可以做到240。还是您从不比较差异?
休伯特·卡里奥

0

80限制是应该在很久以前增加的。请注意,此限制是从年龄开始使用的,当时每个标识符的长度限制为8个字符,并且屏幕/打印机上只有一种字体。无法更改字体大小。

天哪,我们现在有不同的丝网和印刷技术。我们有非常不同的编程语言。没有理由再使用80个字符了。至少增加到120个字符。

即使那样,这也不应该是硬性限制。你越过一个字符吗?好吧,什么都没有发生!

编辑:

关于80个字符的限制历史的详细答案

维基百科上的每行字符数

威奇托州立大学的一项研究发现,CPL对可读性的影响很小,包括速度和理解力。但是,当被问及偏好时,有60%的受访者表示偏爱该研究中使用的最短(35 CPL)或最长(95 CPL)的线。同时,有100%的受访者选择了其中任意一个作为最不希望的数量。


4
不,限制绝对不应该增加。因为它与屏幕和打印技术完全无关,所以只有舒适地扫描每行最多80个字符这一事实(可以认为行宽最好是66个字符,在多列打印中较少)。顺便说一下,这意味着大多数书籍的代码样本少于80列。
Jan Hudec

3
@JanHudec屏幕/打印技术应有尽有。请参阅developers.stackexchange.com/questions/148677/…。使用80个字符的决定纯粹是历史性的,而不是基于研究。您能否添加研究链接以确认您的观点?
苏珊(Sulthan)2013年

另一个问题已经在其注释中包含此UX链接。那里有进一步的参考。虽然数字80本身是历史上的巧合,但它大致是由打字机上每行的罢工次数得出的,而罢工次数是由常见的单列打印宽度得出的,并且平均66封字母是长期以来的传统。
Jan Hudec
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.