Language agnostic 垂直空白的使用

Language agnostic 垂直空白的使用,language-agnostic,whitespace,literate-programming,Language Agnostic,Whitespace,Literate Programming,我在这个问题上的意图不是学究式的,而是探索一个被忽视的重要主题的轴心()。 在使用水平空格、条件后缩进、if和括号之间的空格等方面,人们进行了大量的讨论和关注。 事实上,这个问题被认为是如此重要和有争议,以至于不仅一些公司有关于它的规则和标准,而且一些公司甚至有禁止讨论它的规则 考虑到水平空白的状态,为什么垂直空白的讨论是一个死问题?为什么x比y更重要?几天前,我注意到当我阅读代码时,我会不假思索地调整语句的垂直分组。在阅读了其他人的代码之后,我注意到了几个模式,所以我问stackoverflo

我在这个问题上的意图不是学究式的,而是探索一个被忽视的重要主题的轴心()。 在使用水平空格、条件后缩进、if和括号之间的空格等方面,人们进行了大量的讨论和关注。 事实上,这个问题被认为是如此重要和有争议,以至于不仅一些公司有关于它的规则和标准,而且一些公司甚至有禁止讨论它的规则

考虑到水平空白的状态,为什么垂直空白的讨论是一个死问题?为什么x比y更重要?几天前,我注意到当我阅读代码时,我会不假思索地调整语句的垂直分组。在阅读了其他人的代码之后,我注意到了几个模式,所以我问stackoverflow:

  • 您对垂直空格应用了哪些硬规则和软规则
  • 是否有任何垂直空格的使用通常被认为是非常糟糕或非常好的做法
  • 您是否发现阅读带有“正确”垂直空格的代码有助于理解它
  • 除了我和你,还有谁在乎吗

我当然关心并倾向于在适当的地方用空行对代码进行正确分组(至少对我来说是这样)。有时这意味着许多空白行,但一般来说,我认为代码比任何东西都更清晰。就像操作符周围的空格是一件非常好的事情一样,逻辑分组语句周围的空行也是如此


不过,一次出现多个空行看起来有点不合适。

如果代码垂直间隔不规则,我发现很难读取。我甚至会删除不需要的大括号,或者如果是短块,如ifs或fors,则将其放在同一行。

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

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

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

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

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


对于双空白行:如果有什么区别,你应该真正考虑使它成为一个函数。

几十年来,程序员了解代码的能力通常受到他一次能看到多少的限制。(参见温伯格的《计算机编程心理学》(Psychology of Computer Programming),这是一本老掉牙的书。)在纸质列表的旧时代,程序员会抓起大表格,将多页列表分散开来。如今,屏幕空间比24x80时代要好一些,但我仍然倾向于尽量减少垂直空白的使用,因为大量的空行占用了屏幕空间,可能会显示实际的代码。

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


总体目标是提高代码的可读性。正如没有段落的文章很难阅读一样,没有任何垂直空间的代码也很难阅读。就像散文一样,在写太短或太长的段落之间也有一种平衡。但归根结底,这主要取决于个人风格和偏好。

如果一条注释适用于几行代码,那么我会在最后几行代码后面加上空格,除非有其他语法可以分解(如块的结尾)

无论我在哪里做“某物”,它需要几行代码,紧接着是“某物”,然后我要么抽象成单独的函数,要么放上注释[*]。因此,代码行通常以短块的形式组合在一起,除非流控制使其(在我看来)不言自明

我确实有点在乎空白,但实际上我更在乎的是评论。如果几行代码一起做了一些特定的事情,但它并没有被作为一个函数取出来,那么我想看一个关于这件事的英文描述。这样,我可以看到函数的“步骤”真正地加起来就是正确的结果,然后看看每个步骤都做了它声称做的事情

在类中,我有时在方法/成员函数之间放置空格,有时不这样做。在C++中,在访问说明符之前放置空白。 我在类之间(有时不适用于Java中的匿名内部类)和类之外的函数之间放置空格

除此之外,我的代码在垂直方向上相当密集。我几乎从不使用多个空行,即使在分隔头文件的各个部分时也是如此。我更喜欢blankline commentline blankline,而不是blankline blankline,即使commentline最终是一些完全平庸的东西,比如“helper函数”。我不喜欢函数之间有巨大的垂直空白的样式——如果它们是如此分离,以至于你不想在屏幕上同时看到它们,我会说要么把它们放在不同的文件中,要么用Doxygen/Javadoc注释来填补空白


[*]在我签入的版本中。我通常写的代码或多或少都没有注释,然后编译它,运行快速测试,注释它,运行适当的测试,提交它。这通常会有一些变化,有时会有很多变化。例如,如果我按照预先精确定义的算法编码,或者按照实现“显而易见”的规范编码,我可能会先写注释,然后再写代码。

+1获取关于将其作为函数的注释。我相信这就是为什么垂直空白是一个争议较少的话题。我同意在使用1行和2行新行的方式和原因上有一些通用的一致性,但是如果您有更大的逻辑“分组”代码被新行分隔,那么很可能这应该是一件有趣的事情