Objective 使用空格而不是制表符进行缩进的原因?

Objective reasons for using spaces instead of tabs for indentation?

是否有 objective 根据 PSR-2 标准使用 spaces 而不是制表符来缩进文件的原因,有人可以提供:

基于哪个 PSR-2 标准?

PSR-2 标准的作者考虑的不仅仅是“外观和感觉”,不仅仅是基于意见的东西,而且很多人很难理解为什么 spaces 在团队合作中更好。

接受答案的解释:

根据 Farsides 的回答:存储库的事情可能是 spaces 在 PSR-2 中被解释为缩进工具的确切原因。 PSR-2 是为协助团队合作而开发的标准。行首的单个意外 spaces - 使用选项卡时 - 在 IDE 中可能不可见,并且可能会偷偷溜到存储库中。如果几个人在同一个文件上工作,很可能会产生不必要的冲突。使用 spaces 而不是制表符可以很容易地在眼球上捕捉到这种意外的 space,这可能是使用它们成为标准的原因。

事实:

1。 GIT 和其他版本控制系统对待 white-space 的方式不同

根据我的经验,我们在项目中面临:GIT 和其他版本控制系统 对待不可见 spaces + TABS 的方式不同,它会导致线路发生变化,而实际上并没有受到影响。很容易没有注意到,当不小心添加了一个 space + TAB = 缩进时,在 IDE 中看起来是一样的,但是 GIT 会在合并时产生差异。 它会损害您在源代码管理中有效比较修订的能力,这真的很可怕。当你只有 spaces 时,它永远不会发生。

2。消除协作者环境中的差异(编辑器、OS、偏好等)

选项卡宽度(在 spaces 中)取决于您的环境(文本编辑器、OS、首选项等),但 space 宽度到处都一样。 IDE 足够聪明,可以根据您的个人喜好对待白色 space,但为协作生成的输出应该符合标准。 由于 PSR-2 states,仅使用 spaces,而不是将 spaces 与选项卡混合使用,有助于避免差异、补丁、历史记录和注释方面的问题。使用 spaces 还可以轻松插入细粒度的子缩进以进行行间对齐。

3。使用 spaces 的开发者比使用 tabs

的开发者赚更多的钱

使用 spaces 而不是制表符与 8.6% 更高的薪水相关。使用 spaces 而不是 tabs 与额外 2.4 年经验的薪资差异相关。 (来源:Stack Overflow 2017 Developer Survey)。

4。关于编码风格重要性的大量研究

如果您项目中的每个协作者都保持相同的编码标准 - 从长远来看会很好 运行,协作更高效、更专业,重构或开发时缩进相同。相关研究:

  1. 例如,Ben ShneidermanExploratory experiments in programmer behavior 中证实了这一点:

    when program statements were arranged in a sensible order, experts were able to remember them better than novices. When statements were shuffled, the experts' superiority was reduced.

  2. Soloway 和 Ehrlich 1984 年的一项旧研究,引用于 Code Complete, and supported studies from The Elements of Programming Style:

    Our empirical results put teeth into these rules: It is not merely a matter of aesthetics that programs should be written in a particular style. Rather there is a psychological basis for writing programs in a conventional manner: programmers have strong expectations that other programmers will follow these discourse rules. If the rules are violated, then the utility afforded by the expectations that programmers have built up over time is effectively nullified.

附加事实:

使用空格的项目中的正则表达式搜索表达式不同于使用制表符或混合制表符和空格的项目