研究最佳代码宽度?


131

如果在您选择的IDE中启用了“查看右边距”,则可能默认为80个字符。我倾向于将其更改为120,无非是几年前我所在公司的标准,而且没有其他公司告诉我要改做。

我的问题是,是否有任何研究表明80个字符实际上是代码可读性的最佳最大宽度,还是这个值仅仅是“这就是它一直存在的方式”,没有人真正知道为什么会这样吗?并且,一行代码的宽度是否应该成为您的编码标准的一部分?


1
尽管我不了解任何研究,但是您会找到很多意见来回答这个问题:* 是否有正当理由在当今这个年龄段的代码文件中强制使用最大80个字符的宽度?
亚当·贝莱尔

3
据我所知,尚无研究,但您可能会发现研究不同项目的编码标准很有趣。例如,谷歌的字符为80个字符。(code.google.com/p/google-styleguide),其中WebKit(ala Apple's?)没有限制AFAIK(webkit.org/coding/coding-style.html)。Mozilla的似乎是80(developer.mozilla.org/En/Mozilla_Coding_Style_Guide#Line_length
GMAN

这与我们以这种方式拼写“官僚主义”的原因相同。因为很久以前,有人出于某种原因定义了一个标准,而该标准在当时可能有意义,也可能没有意义。对于拼写,这是对拉丁语的一种可疑的迷恋,其代码相当于纸打孔卡的大小。然后一种方法被标记为“正确”。从那时起,小官僚就一直在执行这些标准。
调谐的

Answers:


116

实际上,80列早于DOS。它来自打卡机,它是80列的设备。

为了回答OP的问题,一个“研究”已经进行了大约600年了-印刷书籍。这些已经发展了数百年,首先考虑了可读性,到现在的位置,文本的平均行长约为60个字符。因此,为了提高可读性,请选择较窄的边距。


85
我真的不相信就可用性而言,您可以将阅读自然语言与阅读编程语言进行比较。
Frug 2012年

25
@Frug-实际上,您可能可以。65个字符宽度的原因不是因为无法读取较大的行,而是当眼睛移至下一行时,弧度太紧。您可以通过增加行高来解决此问题,但这使使用块间距传达含义变得更加困难,因此在IDE中可能需要避免。
Jimmy Breck-McKye

32
@Jim-我的自然语言不包含30个字符的单词(无论如何我都不会使用),并且它的解析方式与编程语言完全不同。您通常可以将一行代码与其余代码分开,无论是长条件代码还是长方法和类的组合。结合缩进,两种语言之间的比较变得荒谬。毫无疑问,任何科学地研究可读性和行长的人都会反对您对差异的洗礼。
Frug 2012年

10
@Frug-我真的看不到您的异议与我提出的任何主张有何关系,但我可以看到缩进破坏了我提出的模型。不过不要叫我吉姆。
Jimmy Breck-McKye 2012年

17
一本书通常比监视器更靠近眼睛,这意味着,如果读者能够在不费劲的情况下阅读本书,则每行字符数更少。屏幕通常不放在书本附近,这意味着每行可以使用更多字符,同时保持在最大视角范围内。此外,代码读取的内容不尽如人意,因此宽度变得不太重要。我(因人而异)可以很容易地遵循的120个字符的行代码,我的笔记本电脑屏幕上,但这个太宽了,在我的15"笔记本电脑2个Emacs的缓冲区,唉。
Obscaenvs

104

留意那些以后需要维护您的软件并限制在80个字符以内的程序员。

选择80的原因:

  • 可以在笔记本电脑上使用大字体读取

  • 留出空间并排放置两个版本以进行比较

  • 在IDE中为导航视图留出空间

  • 打印时不会任意中断(也适用于电子邮件,网页等)

  • 限制了一行的复杂性

  • 限制缩进,进而限制方法/功能的复杂性

是的,它应该是编码标准的一部分。


10
这些是将行宽保持在80个字符以内的重要原因。我很惊讶(失望)您的答案(经过深思熟虑和正确的回答)没有得到更多的分数。在此列表中,我要添加:(1)水平滚动并不有趣。(2)通过在多个列中查看代码,可以大大提高正在处理的代码的密度。当您有几条线在大多数其他线没有延伸到右侧时延伸到右侧时,会浪费大量房地产。
Donnie Cameron

4
好的,但是当代码块中没有缩进时会发生什么?发生在我身上的80个字符根本不好玩。
EKanadily

14
Limits the complexity in one line我不确定为什么将复杂度分散到多行更好。它只是将更多内容推入您的思维定势。
乔纳森·

4
这是一个非常古老的话题。但是您现在仍然同意开发人员使用27英寸显示器的方法吗:-)。我的意思是,如果视力是一个问题,那么更大的屏幕可以提供帮助。8年前,我们仍在开发17或20英寸显示器,甚至还有4:3分辨率的显示器。
Mathijs Segers

1
@MathijsSegers,无论显示器大小或分辨率如何,将文本保留在视野的中间30度以内仍会更舒适。当在并排显示器中打开多个窗口时,我倾向于转头看向另一个。一个人不必为了从一行的一端到另一端阅读而完全转动头或转动眼睛。如果整日进行如此快速的眼睛或头部旋转,很可能会引起眩晕。
莫里斯

41

我没有学习,但是我会介绍我的经验。

我发现在处理文本时,水平滚动非常乏味。我看一下将在其中使用代码的环境,并根据该上下文设置宽度标准。

例如,当我在XWindows上的Emacs中工作时,始终并排拥有2个Emacs窗口效果很好。最多只能输入80个字符,所以这是我的最大行长。

有一次,我在1920x1200屏幕上的Visual Studio中工作。我将其最大化,所有工具窗口都停靠在一侧。剩下的空间可以并排放置两个编辑器窗口,大约100个字符。

我还发现最长的行来自带有长参数列表的方法调用。有时这是代码的味道:也许应该重构该方法。

如果您和您的协同编程人员具有高分辨率的屏幕和清晰的视力,则务必使用小字体和长行。相反,您可能需要短线。


1
再加上一只“锐利的眼睛”,因为那真的发生在我身上。
EKanadily

26

除非公司另有说明,否则我通常使用120-150。但是,这也取决于代码的种类:

  • 我(几乎)永远不会在一行上使用多个语句
  • 仅当看起来相似的行可以对齐且不会折断时,才使用长行(> 12)。
  • 我总是使用足够的空格/括号等
  • 我更喜欢长名称而不是短名称

直到几年前,我限制为100,但现在通常使用宽屏,并且在笔记本电脑上(甚至我几乎不使用)都可以看到高分辨率的显示器120。

将屏幕与书籍进行比较并不是很好,因为书籍具有更大的垂直空间,而屏幕具有更多的水平空间。我总是尽力保持最大功能。一个可见的屏幕长。


6
将多个窗口并排打开时,每行120-150个字符如何工作?您是否使许多代码编辑器窗口并排打开?—在我的30英寸显示器上,如果我将行数限制为97个字符/行,则可以并排设置3个窗口。
KajMagnus

1
我在大型显示器上编码,我也喜欢大量代码。我的目标是110-130。我的主要目标之一是可读性,在我看来,有时将语句分成2-3行是不太可读的。有时我还会去500-1000来隐藏我不想看到的垃圾,例如一些注释,禁用的代码和一些硬编码的值。我认为这也取决于程序员。如果大多数编码器的工作频率为80,那么在使用共享代码时最好针对这一目标。
2015年

10

也许80个字符也是避免这些不良吸气链的好方法:

object.getFoo().getBar().getFooBar().get ...

如果将其限制为80个字符,也许有人会本地化这些变量并进行null检查等,但也许大多数程序员会将其包装在下一行中。我不知道

除此之外,如starblue所提到的,有80个字符很棒。这应该明确地纳入编码标准。


5
仅供参考,像这样的过多方法链接被称为火车残骸反模式
丹尼斯

4

忽略硬件限制以及我们在阅读代码和自然语言方面的任何差异,我看到将行数限制为80个字符的三个主要原因。

  1. 人类的眼球是圆形的,并不是真正的狭窄和宽大,而且它们的大部分分辨率都在中间。一次阅读数小时时,可以根据需要使用一个滚动条以短弧线扫视眼睛,这要舒适得多。我不了解针对代码的可读性的正式研究,但是从我自己的观察来看,显示器在2英尺外,文字大小为10pt等宽字体,100个字符约占我水平方向的1/3视力,或大约60度(在我们所有眼睛的分辨率都在30度左右的范围内)。
  2. 大多数人在工作中使用大型监视器,这样他们就可以看到多个东西而无需来回点击,而不能看到一个很大的东西。
  3. 较短的行包含较少的复杂性,这有望迫使开发人员将其代码分解为易于消化的单元。

3

我清楚地记得在某处(我认为它在《敏捷文档》中)读过,为了获得最佳的可读性,文档的宽度应大约为两个字母或60-70个字符。我认为旧终端的线宽部分来自该旧印刷规则。


3

如果您要打印代码,则右边距选项旨在向您显示页面的宽度,并且先前发布的内容显示该宽度设置为80,因为这是GUI一直打孔之前的行长牌。

我最近在一些博客上看到了一个建议(不记得是哪个博客),建议增加您的IDE字体大小以提高代码质量,其背后的逻辑是,如果屏幕上显示的代码较少,您将编写较短的行,并且提示功能。

我认为较短的行使阅读代码和调试起来更容易,所以我尝试使行保持简短,如果您必须设置限制以使自己编写更好的代码,则选择适合自己的代码-如果您的工作效率更高较长的行只能在宽屏幕上随意增加页面大小和代码。


1

正如某些人在其他答案中指出的那样,限制使用80个字符的原因部分是历史原因(打孔卡,小屏幕,打印机等),而部分原因是生物学的(要跟踪您所处的行,通常可以看到整个行无需转头)。

也就是说,请记住,我们仍然是人类,我们构建工具来解决自己的局限性。我建议您忽略有关字符限制的整个争论,而只写有意义的东西,而不论它们的长度如何,都应使用IDE或文本编辑器来帮助您正确地跟踪行。在制表符和空格辩论中使用相同的缩进参数,以及缩进应多大,我建议您使用缩进标记(最常见的是制表符),让人们配置自己的IDE或文本编辑器以显示它们因为他们觉得最舒服。

每行坚持使用固定数量的字符将使除目标受众之外的所有人情况变得更糟。就是说,如果您永远不会共享代码,那就永远;那么实际上根本没有理由进行讨论。如果您想共享代码,则可能应该让人们自己决定他们想要的东西,而不是强加您(或其他人)的理想。


0

据我所知,80字符用作编码标准,以保持与命令行编辑器的兼容性(默认终端宽度通常为80字符)。在现代IDE和大屏幕分辨率下,80个字符可能不是“最佳”,但对于许多开发人员而言,保持终端的可读性至关重要。因此,不太可能很快就将80个字符的宽度替换为代码宽度的事实上的标准。为了回答您的最后一个问题,是的,应该在编码标准中解决代码宽度以及任何其他会影响代码可读性的特征。

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.