研究最佳代码宽度?

Fos*_*tah 121 code-readability

如果在所选的IDE中启用"查看右边距",则可能默认为80个字符.我倾向于将它改为120,除了它是几年前我公司的标准,没有其他公司告诉我做不同的事情.

我的问题是,是否有任何研究实际上显示80个字符是代码可读性的最佳最大宽度,或者这个值只是"它一直是这样的方式"而没有人真正知道为什么会这样?并且,一行代码的宽度是否应该是编码标准的一部分?

小智 109

实际上,80列的东西早于DOS.它来自卡片冲头,它是80柱装置.

为了回答OP的问题,一项"研究"已经持续了大约600年 - 印刷书籍.这些已经发展了几个世纪,最重要的是可读性,我们现在的位置,文本的平均线长约为60个字符.因此,为了便于阅读,请选择更窄的边距.

  • 我真的不相信你可以比较阅读自然语言和阅读编程语言的可用性. (76认同)
  • @Jim - 我的自然语言中不包含30个字符的单词(不管我用的是什么),它的解析完全不同于编程语言.您通常可以将一行代码与其余代码分开,无论是长条件还是长方法和类的组合.将其与缩进相结合,两种语言之间的比较变得荒谬.毫无疑问,任何科学研究可读性和线长的人都会反对你对这些差异的洗涤. (31认同)
  • @Frug - 实际上,你可能可以.65字符宽度的原因不是因为无法读取较大的线条,而是当眼睛移动到下一条线时它的弧线太紧.你可以通过增加行高来解决这个问题,但是这会使用块间距来传达意义变得更加困难,因此在IDE中可能需要避免这种情况. (23认同)
  • 书籍通常比显示器更靠近眼睛放置,这意味着如果读者能够在不必抬起颈部的情况下阅读书籍,则每行的字符数更少.屏幕通常不放置在书本的距离处,这意味着可以使用每行更多的字符,同时保持在最大眼睛角度的范围内.此外,代码读取的次数不尽如人意,因为这个宽度不那么重要.我(YMMV)可以在我的笔记本电脑屏幕上轻松跟踪包含120个字符**代码**的行,但这对于我15英寸笔记本电脑上的2个emacs缓冲区来说太宽了,唉. (17认同)
  • @Frug - 我真的没有看到你的异议如何与我提出的任何主张有关,但我可以看到缩进打破了我提议的模型.不过,别叫我'吉姆'. (10认同)
  • 让我们在这个房间里收集我们的胆子并面对大象:@Obscaenvs比其他人在这里结合起来更有意义.正确地解决了这个问题的核心问题. (2认同)
  • 这个答案应该被否决而不是被赞成,它没有回答问题。它之所以流行,是因为很多程序员都对它有自己的看法。 (2认同)

sta*_*lue 95

怜悯那些必须在以后维护你的软件并坚持80个字符的程序员.

偏好80的理由:

  • 可在笔记本电脑上使用更大的字体进行阅读

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

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

  • 打印没有任意破坏线(也适用于电子邮件,网页,......)

  • 限制一行的复杂性

  • 限制缩进,这反过来又限制了方法/功能的复杂性

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

  • "限制一行中的复杂性"我不确定为什么在多行中传播复杂性更好.它只是推动你的心理堆栈. (12认同)
  • 这些是将线宽保持在80个字符以下的重要原因.我真的很惊讶(失望),你的答案显然是正确的,没有得到更多的积分.在这个列表中,我想补充一句:(1)水平滚动并不好玩.(2)您可以通过查看多个列中的代码来大大增加您正在处理的代码的密度.当你有大量的线路向右延伸时,大多数其他线路没有,大量的房地产就会浪费掉. (9认同)
  • 这是一个非常古老的话题.但是你现在还是同意大量开发人员使用27英寸显示器:-).我的意思是,如果视线是一个问题,更大的屏幕可以帮助.8年前,我们仍在使用17或20英寸显示器,有些甚至是4:3分辨率. (4认同)
  • 好的,但是当代码块中没有缩进时会发生什么?发生在我身上的80个字符根本不好玩。 (3认同)
  • @MathijsSegers 无论显示器尺寸或分辨率如何,将文本保持在视野的中间 30 度内仍然会更舒服。当在并排显示器中打开多个窗口时,我倾向于将头从一个看向另一个。一个人不应该为了从一行的一端阅读到另一端而一直转动头部或转动眼睛。如果一整天都如此快速地转动眼睛或头部可能会导致眩晕。 (2认同)
  • 使代码更窄意味着它最终会更长。所以一下子能看到的东西就更少了。因此,恕我直言,阅读实际上变得更加困难。 (2认同)
  • 我个人更喜欢 100,因为我更喜欢 4 个空格缩进。 (2认同)
  • 14 年后阅读这个答案(作为一个确实维护早期编写的代码的人),考虑到我现在在 4k 显示器上打开 Visual Studio,并有 4 个并排的代码屏幕,看到 80 个字符的建议很有趣,每个不少于110列。与“目标”80 但灵活允许最多 120 列的代码库相比,过早地将行硬包装到 80 的代码库更难遵循分段语句的锯齿形模式。 (2认同)
  • @DwayneRobinson 确实如此。值得注意的是,人们会利用心理扭曲来“合理化”来自“古老”技术的“任意”数字:https://www.ibm.com/ibm/history/ibm100/us/en/icons/punchcard/ (2认同)

Jay*_*uzi 37

我没有学习,但我会讲述我的经历.

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

例如,当我在XWindows上使用Emacs时,它总是可以并排放置 2个Emacs窗口.这限制为80个字符,这是我的最大行长度.

有一次,我在1920x1200的屏幕上使用Visual Studio.我会保持最大化,所有工具窗口都停靠在一侧.两个编辑器窗口左侧有足够的空间,大约100个字符.

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

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


小智 22

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

  • 我(几乎)从不在一行上使用多个语句
  • 我只使用长行(> 12),只有看起来相似的行可以对齐而不会被破坏.
  • 我总是使用足够的空格/括号等
  • 我更喜欢较长名称之上的较长变量名称

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

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

  • 如果多个窗口并排打开,每行120-150个字符如何工作?你是否保持许多代码编辑器窗口并排打开? - 在我的30英寸显示器上,我可以并排放置3个窗口,如果我将线条限制为97个字符/线. (5认同)
  • 我在大显示器上编码,我也喜欢更大的数量。我的目标是 110-130。我的主要目标之一是可读性,在我看来,将语句分成 2-3 行有时不太可读。我有时也会去 500-1000 隐藏我不想看到的垃圾,例如一些评论、禁用代码和一些硬编码值。我认为这也取决于程序员。如果大多数编码员在 80 岁的情况下工作,那么在使用共享代码时最好以此为目标。 (2认同)

Dr *_*eco 9

这里有一个研究供您参考:

我教授编程30多年,在此期间我积累了1823个C源代码,其中包含各种例程,从随机小游戏到神经网络、编译器、教育软件、自动生成的lex/yacc源代码等。

遵循帕累托原则,80% 的程序的行数小于 159 列。因此,为了削减较低的 20% 和较高的 20%,我们有:

  • 1823 源代码
  • 其中 80% 小于 159 列
  • 其中 80% 大于 64 列

现在这是一个给你自由的范围。您不想仅仅为了代码而将代码限制为 80 列,因为有时您需要嵌套循环、函数或一些缩进,这些缩进在更大的行中很容易理解,并且如果您强行扭曲您的逻辑为了适应任意列宽,您没有使用最佳逻辑。

另一方面,有时候,线条的大小表明你的逻辑可以更好,并且你的线条可以更小;特别是如果您不在代码的嵌套部分并且您已经超过了 160 列的限制。

根据我自己的经验和可读性,我建议您编写以 80 列为目标的代码,但允许 120 列的边距,并且永远不要超过 160 列的限制。

此外,我们应该考虑现有的古老阅读体验:书籍。书籍的排版设计是为了方便读者的眼球移动,根据该领域的专业人士的说法,最佳栏目大小最好是每行 60 个字符左右,不少于 40 个,不多于 90 个。

由于编码并不完全是读书,我们可以设定上限,每行应该保持在 80 到 90 个字符之间。

除非您正在编写将在特定屏幕尺寸和旧显示器上运行的低级代码,否则我建议您遵循gopher标准,即每行 67 个字符


好奇心:

  • 1823 个源代码中最大的一行是单行 1020 列的五行
  • 最大的一行代码不是单行,是一款文字冒险游戏,有 883 行。当然,这是一个很好的做法,因为如果您不限制换行,文本将更好地显示在屏幕上,在您实际具有大小的列中进行换行。
  • 最小的代码行(非零)为 14 个字符长。
  • 我用来检查文件大小的命令是:find . -type f -name "*.c" -exec wc -L {} \; | sort -n | less -N


Chr*_*wes 8

也许80个字符也是避免这些糟糕的吸气链的好点:

object.getFoo().getBar().getFooBar().get ...
Run Code Online (Sandbox Code Playgroud)

如果你将它限制为80个字符,也许有人会将这些变量本地化并进行空检查等,但也许大多数程序员会让它们换行到下一行.我不知道

除此之外,如星蓝提到的那样,80个字符很棒.这应该明确地进入编码标准.

  • 仅供参考,像这样的过度方法链被称为[火车残骸反模式](http://c2.com/cgi/wiki?TrainWreck). (3认同)

mau*_*ice 6

不考虑硬件限制,以及我们阅读代码与自然语言的方式的任何差异,我认为将行限制在 80 个字符左右的三个主要原因。

  1. 人的眼球是圆的,并不是真正的窄和宽,而且大部分的分辨率都在中间。一次阅读数小时时,根据需要使用一个滚动条以短弧扫视眼睛会舒服得多。我不知道有没有专门针对代码易读性的正式研究,但根据我自己的观察,显示器距离 2 英尺,文本大小为 10pt 等宽字体,100 个字符约占我水平场的 1/3视觉,或大约 60 度(在我们所有眼睛的分辨率都在 30 度左右的范围之外)。
  2. 大多数人在工作中使用大显示器是为了他们可以看到多个东西而无需来回点击,而不是为了他们可以看到一个非常大的东西。
  3. 较短的行包含较少的复杂性,这有望迫使开发人员将他们的代码分解为更易于理解的单元。