垂直空白的使用

14

我提出这个问题并不是要苛求细节,而是探讨一个重要话题(空白字符的使用)中被忽视了的方面。 水平空格的使用,如在条件语句后进行缩进、if和括号之间加入一个空格等,已经引起了广泛的争议和注意。实际上,这个问题被认为非常重要和有争议,以致于一些公司不仅制定了规则和标准,甚至还有规定禁止讨论它。

既然水平空格如此重要,那么为什么垂直空格的讨论如此“冷门”呢?为什么x比y更重要?几天前,我注意到当我读代码时,我会在不经意间调整语句的垂直排列方式。现在我阅读别人的代码时,特别关注垂直空格,我发现了一些模式,所以我问stackoverflow:

  • 你在垂直空格方面应用了哪些硬性或软性规则?
  • 是否有任何被普遍认为是非常糟糕或非常好的垂直空格使用方法?
  • 你有没有发现阅读“正确”的垂直空格的代码有助于理解它?
  • 除了排版师和我之外,还有其他人在乎吗?

1
似乎这应该是一个社区维基。 - EmFi
1
我发现垂直的空白比水平缩进更有助于理解代码。和g的回答一样,我也会把代码“段落”放在一起,这反映了在散文段落之间放置空白行的趋势(而不是或者除了第一行缩进之外)。个人认为,在自己独立成行的开放或闭合花括号上的做法太过类似于空白行,过度使用会破坏垂直空白在将代码“分块”成有意义的组中的效果。我在查找任何关于此的证据或研究时发现了这个问题。 - Syntax Junkie
7个回答

23

我将代码中的垂直空间视为书面散文中的段落。就像段落旨在将有共同点或想法的句子组合在一起,相关的行也应该被分组在一起。

总体目标是提高代码的可读性。没有任何段落的文章很难阅读,同样地,没有任何垂直空间的代码也很难阅读。就像散文一样,需要在编写段落过短或过长之间取得平衡。但最终,这主要取决于个人风格和喜好。


3
支持“段落”这个想法。我们被教导将代码行视为句子(具有主语、动词等),但是这个想法通常并没有向上扩展。 - James Cronen
此外,文本中的段落并不总是将思想分组,它们通常是高度可视化的,并且大多数时候只是为了使它们看起来好看而分组字母计数。另一方面,代码中的垂直空间应始终将相关行分组。 - cregox

6

我认为最重要的一点是将逻辑步骤分组,例如:

foo.setBar(1);
foo.setBar2(2);
foo.writeToDatabase();

bar.setBar(1)
bar.setBaz(2);
bar.writeToDatabase();

那样的话,对我来说,代码更容易阅读,更具描述性。

6
如果一组语句在逻辑上相关联,我会在它之前和之后留出一个空行。这种分离有助于以后将其重构为函数。
至于双倍空行:如果某些内容非常独特,你应该真正考虑将其制作成一个函数。

1
对于关于将其变成函数的评论,我给予+1。我认为这就是为什么垂直空白很少被讨论的原因。我同意在使用1个或2个新行的方式和原因上有一些一般性的一致性,但如果您有更大的逻辑“分组”的代码被新行分隔,那么很可能它应该是一个函数。 - RC.

4
如果一条注释适用于多行代码,则我会在这些行的最后添加空格,除非有其他语法来分隔它们(例如块的结尾)。
如果我在“某事”上花费了几行代码,紧接着是“其他事情”,那么我要么将其抽象为单独的函数,要么放置注释。因此,代码通常以短块的形式分组在一起,除非流程控制(在我看来)已经很明显了。
我确实关心空白,但实际上我更关心注释。如果几行代码一起执行某个特定的任务,并且没有被拆分为函数,则我想看到该任务的英文描述。这样,我可以看到函数的“步骤”是否真正添加到正确的结果中,然后查看每个步骤是否执行其所声称的操作。
在类中,我有时在方法/成员函数之间放置空白,有时不放。在C++中,我在访问说明符之前放置空格。
我在类之间放置空格(在Java中匿名内部类有时不需要)和在类外部的函数之间放置空格。
除此之外,我的代码相当垂直密集。即使分离头文件的各个部分等情况,我几乎从不使用多个空白行。我更喜欢空白行-注释行-空白行,而不是空白行-空白行,即使注释行最终变成了完全平凡的内容,例如“帮助函数”。我不喜欢在函数之间有巨大的垂直空白 - 如果它们如此独立,以至于您不想同时在屏幕上看到它们,请将它们放入不同的文件中或使用Doxygen / Javadoc注释填充间隙。
[*] 在我检查版本时。我通常写代码几乎没有注释,然后编译它,运行快速测试,添加注释,运行正式测试,提交代码。这通常会有一些变化,有时甚至会有很大的变化。例如,如果我正在编写精确预定义的算法或实现“显而易见”的规范,我可能会首先编写注释,然后再编写代码。

2
几十年来,人们一直知道程序员理解代码的能力通常受限于他一次能看到多少代码。 (例如,Weinberg的“计算机编程心理学”,这是一本老书但很有价值。)在旧时代的纸质清单中,程序员会抓取大型表格并展开多页清单。 现在,屏幕房地产比24x80的日子要好一些,但我仍然倾向于最小化使用垂直空白,因为空行占用了可以显示实际代码的屏幕空间。

1

我肯定会注意代码的分组,尽可能地使用适当的空行(至少对于我的眼睛来说)。通常这意味着有很多空行,但总的来说,我认为与所有内容挤在一起相比,代码更易读。就像运算符周围的空格非常好一样,逻辑分组语句周围的空行也是一个很好的东西。

不过,一次超过一个空行看起来有点不协调。


1
我倾向于同意您的评论,但如果我看到代码中有几个这样的分区,它往往会让我想为这些逻辑分组的语句编写新的子函数。 - Dolphin

1

如果代码在垂直方向上间隔不规则,我会觉得很难阅读。我甚至会去除不必要的大括号,或者对于短的代码块,比如if或for语句,将其放在同一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接