请为那些日后需要维护你软件的程序员着想,将每行代码限制在80个字符以内。
选择80个字符的原因是:
可在笔记本电脑上使用更大字体进行阅读
留出空间便于将两个版本并排比较
留出空间用于IDE中的导航视图
不会任意断行地打印(同样适用于电子邮件、网页等)
限制一行代码的复杂性
限制缩进,从而限制方法/函数的复杂性
这应该是编码规范的一部分。
我没有学过相关专业,但我会分享一下我的经验。
我发现在处理文本时水平滚动很繁琐。 我会考虑代码将要使用的环境,并基于该上下文设置宽度标准。
例如,当我在XWindows上使用Emacs时,始终保持两个Emacs窗口并排效果很好。 这将它们限制为80个字符,因此这是我的最大行长度。
曾经我在1920x1200的屏幕上使用Visual Studio。 我会将其最大化,并将所有工具窗口都停靠在一侧。 剩余的空间足够放置两个编辑器窗口并排,每个窗口大约100个字符。
我还发现,最长的行来自于拥有长参数列表的方法调用。这有时是一个代码异味:也许应该重构该方法。
如果您和您的合作者拥有高分辨率屏幕和清晰的视力,请使用小字体和长行。反之,则需要使用短行。
我通常使用120-150的行宽,除非公司有不同的要求。然而,这也取决于代码的种类:
几年前我限制在100之内,但现在宽屏幕通常得到应用和高分辨率显示器,甚至可以在笔记本电脑上看到120(我几乎不使用笔记本电脑)。
将屏幕与书进行比较并不是一个很好的方法,因为书有更多的垂直空间,而屏幕有更多的水平空间。我总是尝试使一个函数最多在一个可见的屏幕长度内。
除了硬件限制和阅读代码与自然语言的方式不同之外,我认为将行数限制在80个字符左右有三个主要原因。
也许80个字符也是避免这些糟糕的getter链的一个好点:
object.getFoo().getBar().getFooBar().get ...
如果您将它限制在80个字符内,也许有人会对这些变量进行本地化和null检查等处理,但大多数程序员可能会让它们换行。我不知道。
除此之外,正如starblue所提到的,80个字符是很好的。这一点应该绝对纳入编码标准中。
这里有一项研究:
我教授编程超过30年,期间创作了1823个包含各种功能的C语言源代码,涵盖随机小游戏、神经网络、编译器、教育软件、自动生成的lex/yacc源代码等。
根据帕累托法则,其中80%的程序行数小于159个字符。因此,为了去掉前20%和后20%,我们有:
这是一个给你自由的范围。你不想仅仅为了限制字符宽度而将代码限制在80个字符以内,因为有时你需要嵌套循环、函数或缩进,如果强行将逻辑扭曲适应任意列宽,你并没有使用最好的逻辑。
另一方面,有时候代码行的大小表明你的逻辑可能更好,你的行可以更短;特别是如果你没有处于代码的嵌套部分,已经超过了160个字符的限制。
基于我的经验和可读性,我建议你写代码以80个字符为目标,但允许有120个字符的余量,永远不要超过160个字符的限制。
此外,我们还应该考虑到已有的阅读经验:书籍。书籍是按照印刷排版规律来使阅读者的眼睛移动更轻松的,根据该领域的专业人士,最佳的列宽大小理想情况下约为每行60个字符,不少于40个字符,不超过90个字符。
由于编码并不完全像读书一样,我们可以选择上限,应该保持在80和90个字符每行之间。
除非你正在编写将在特定屏幕尺寸和旧显示器上运行的低级代码,那么我建议你遵循gopher标准,即每行67个字符。
有趣的事实:
find . -type f -name "*.c" -exec wc -L {} \; | sort -n | less -N
我清楚地记得在某个地方读到过(我想是在敏捷文档中),为了最佳可读性,文档的宽度应该大约是两个字母表,即60-70个字符。我认为旧终端的行宽部分来自于这个古老的印刷规则。