使用垂直空白

时间:2009-11-20 17:12:50

标签: language-agnostic whitespace literate-programming

我在这个问题上的意图不是迂腐,而是探索一个被忽视的重要主题轴(the use of whitespace)。 关于水平空白的使用,有条件的缩进,if和括号之间的空格等,已经引起了很多争论和关注。 事实上,这个问题被认为是如此重要和有争议,不仅一些公司有规则和标准,但有些公司甚至有规则禁止它的讨论。

为什么考虑到水平空白的状态,对垂直空白的讨论是如此死的问题?为什么 x y 更重要?几天前,我注意到当我阅读代码时,我不经思考地经常调整语句的垂直分组。现在已经阅读了其他人的代码,着眼于垂直空白,我注意到了几个模式,所以我问stackoverflow:

  • 您对垂直空白应用了哪些硬性规则和软规则?
  • 是否存在通常被视为非常糟糕或非常好的实践的垂直空白用途?
  • 您是否发现阅读代码的“正确”垂直空白有助于理解它?
  • typographers和我以外的其他人关心吗?

7 个答案:

答案 0 :(得分:17)

我在代码中查看垂直空间,就像我在书面散文中查看段落一样。正如段落意在将具有共同点或想法的句子组合在一起时,相关的行应该组合在一起。

总体目标是提高代码的可读性。就像没有任何段落的文章一样难以阅读,所以代码没有任何垂直空间。就像散文一样,在构成太短或太长的段落之间存在平衡。但最终,它主要归结为个人风格和偏好。

答案 1 :(得分:6)

我认为最重要的事情之一是将逻辑步骤组合在一起,例如:

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

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

这样,代码更容易阅读,而且对我来说更具描述性。

答案 2 :(得分:6)

如果一组陈述在逻辑上相关,我会在前后给它一个空白行。如果我需要稍后将其重构为函数,这种分离会有所帮助。

至于双重空行:如果某些内容不同,你应该考虑将它作为一个函数。

答案 3 :(得分:3)

如果注释适用于多行代码,那么我会在最后一行之后添加空格,除非还有其他语法可以解决(比如块的结尾)。

我正在做的“某事”需要几行代码,紧接着是“别的东西”,然后我要么抽象成单独的函数,要么放置注释[*]。因此,代码行通常最终在短块中组合在一起,除非流量控制使得它(在我看来)不言自明。

我确实关心空白,但实际上这是我更关心的评论。如果几行代码一起做了一些特定的事情,而且它没有作为一个函数被删除,那么我想看一个关于那个东西的英文描述。通过这种方式,我可以看到函数的“步骤”真正地加起来得到了正确的结果,然后看看每个步骤都做了它声称要做的事情。

在类中,我有时会在方法/成员函数之间添加空格,有时则不会。在C ++中,我在访问说明符之前放了空格。

我在类之间放置了空格(有时不用于Java中的匿名内部类)和类之外的函数。

除此之外,我的代码非常密集。我几乎从不使用多个空白行,即使分离头文件的各个部分等。我更喜欢blankline-commentline-blankline而不是blankline-blankline,即使注释行最终是像“帮助函数”那样完全平庸的东西。我不喜欢在函数之间有巨大垂直空白的样式 - 如果它们是如此独立以至于你不想同时在屏幕上看到它们,我会说要么将它们放在不同的文件中,要么用Doxygen填补空白/ Javadoc评论。

[*]在我签入的版本中。我通常在没有注释的情况下或多或少编写代码,然后编译它,运行快速测试,注释它,运行正确的测试,提交它。这通常会有所改变,有时会发生很大变化。例如,如果我正在编写一个事先精确定义的算法,或者编写一个实现“明显”的规范,我可能先写注释然后编写代码。

答案 4 :(得分:2)

数十年来人们都知道,程序员理解代码的能力通常受限于他一次可以看到多少代码。 (例如,参见Weinberg,“计算机程序设计心理学”,一个古老而又好的人。)在纸质列表的旧时代,程序员会抓住大表并传播多页列表。如今,屏幕空间比24x80的日子要好一些,但我仍然倾向于最小化垂直空白的使用,因为大量的空行会占用屏幕空间,可能会显示我的实际代码。

答案 5 :(得分:1)

我当然关心并倾向于在适当的情况下用适当的空行将代码正确分组(至少在我眼中)。 Ofttimes这意味着许多空行,但总的来说,我认为代码比一起挤在一起的所有内容更清晰。就像运算符周围的空格是一个非常好的东西,所以在逻辑分组的语句周围是空行。

但是,不止一个空白行看起来有点不合适。

答案 6 :(得分:1)

如果代码在垂直方向上不规则地间隔,我发现很难读。我甚至去除了不需要的支撑,或者它是短块,如ifs或fors,将它放在同一条线上。