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

omtl5h9j  于 2023-01-08  发布在  PHP
关注(0)|答案(3)|浏览(124)

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

  • 事实,
  • 参考文献,
  • 专门知识

PSR-2基于哪个标准?
PSR-2标准的作者考虑的不仅仅是"外观和感觉",不仅仅是基于观点的东西,很多人很难理解为什么空间在团队合作中更好。

关于接受答案的说明:

根据Farsides的回答:存储库的事情可能就是为什么PSR-2中的空格被解释为缩进工具的一个确切例子。PSR-2是为协助团队合作而开发的标准。在使用制表符时,行首的单个意外空格可能在IDE中不可见,并可能偷偷进入存储库。如果几个人处理同一个文件,很可能会产生不必要的冲突。使用空格而不是制表符可以很容易地捕捉到这样一个意外的空间,这可能是一个原因,为什么使用它们成为一个标准。

gab6jxml

gab6jxml1#

事实:

1. GIT和其他版本控制系统处理空白的方式不同

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

2.消除协作者环境中的差异(编辑器、操作系统、首选项等)

选项卡宽度(在空格中)取决于您的环境(文本编辑器、操作系统、首选项等),但是空格宽度在任何地方都是一样的。IDE足够聪明,可以根据您的个人喜好来处理空格,但是为协作生成的输出应该符合标准。正如PSR-2所述,只使用空格,不要将空格与制表符混合使用,有助于避免差异、补丁、空格的使用也使得插入细粒度的子缩进以进行行间对齐变得容易。

3.使用空格的开发人员比使用制表符的开发人员赚的钱多

使用空格而不是制表符可以带来8.6%的高工资。使用空格而不是制表符可以带来相当于额外2.4年工作经验的高工资差异。(资料来源:Stack Overflow 2017 Developer Survey)。

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

如果你项目中的每个合作者都能保持相同的编码标准--从长远来看,这是件好事,合作会更高效、更专业,当你重构或开发时也会保持相同的缩进。
1.例如,* Ben Shneiderman * 在Exploratory experiments in programmer behavior中证实了这一点:
当程序语句以合理的顺序排列时,Maven比新手能更好地记住它们。2当语句被打乱时,Maven的优势就减弱了。
1.* Soloway和Ehrlich * 在Code Complete中引用了一项1984年的旧研究,并支持The Elements of Programming Style的研究:
我们的实证结果证实了这些规则:* * 程序应该以特定的风格编写,这不仅仅是一个美学问题。相反,以传统的方式编写程序有一个心理学基础:程序员强烈期望其他程序员遵循这些话语规则。2如果违反了这些规则,那么程序员长期积累的期望所提供的效用实际上是无效的**。

yruzcnhs

yruzcnhs2#

  • 这个帖子很老了,但仍然出现在搜索结果中,而且不仅仅是PHP查询。我相信它缺乏现代的可访问性思想。*

公认答案中的事实是明确的:对于外观一致的代码,空格是最好的
然而,一个人在与他们一起工作的人中也有一致性吗?
情况可能并非如此:有些人可能视力受损。
在一个开源项目中,人们甚至可能不知道与他们一起工作的人有多“一致”。
有些需要很大的字体,比如being able to set the tab width to 1 is a big deal。(我是近视眼,虽然我除了戴眼镜外没有其他特殊需要,但我能理解它对其他人有多有用)。
在使用空格和制表符的项目上工作了多年之后,我很明显
对大多数开发人员来说,制表符或空格不会改变任何东西**。我们很容易适应一个或另一个选择。

**唯一重要的是有特殊需要的人。对他们来说,标签更好。**这不是应该是一笔交易吗?

现在更是如此,因为许多语言现在都有自动格式化代码的好工具。如果一种语言有自动格式化工具,那么使用它应该是一个优先事项。从来没有考虑过缩进或格式化是如此的棒。
有了选项卡,代码在每个人的屏幕上看起来不再一致,但另一件事将变得一致:对每个人来说都是一次很好的体验

这正是Web引入媒体查询prefers-color-schemeprefers-contrast的原因。我们希望提高网站的可访问性;源代码也应该得到同样的回报。

因此,我的建议是设置项目设置以修复开发人员不应该处理的操作系统之间的差异,并设置一些首选项,如修剪尾随空格。
就是这样,不要设置制表符宽度,这是用户设置。

强制设置制表符宽度就像为项目中的每个人强制设置明亮的高对比度主题。

例如,这里有一个.editorconfig文件:

# https://editorconfig.org

[*]
charset = utf-8
end_of_line = lf
indent_style = "tab"
trim_trailing_whitespace = true
insert_final_newline = true

以及.vscode/settings.json文件:

{
    "files.encoding": "utf8",
    "files.eol": "\n",
    "files.trimTrailingWhitespace": true,
    "files.insertFinalNewline": true,
    "files.trimFinalNewlines": true,
    "editor.insertSpaces": false,
    "editor.defaultFormatter": "esbenp.prettier-vscode",
}

(Also,公认答案中的第三点--“赚更多的钱”--可能会产生误导。使用空格的开发者可能只是因为年纪大了(老习惯也是如此)才赚更多的钱。年轻的开发者(支付较少)可能会回答说,他们使用制表符是因为他们在缩进时按了Tab键。更多信息,请参见original post下面的评论。)

**TL;DR:我建议使用制表符,不要强制它们的宽度(如果可能的话,对其他所有内容使用自动格式化程序)。**当然,如果您使用的项目/语言由于技术原因不允许这样做,这就不适用了。

niknxzdl

niknxzdl3#

其他事实:

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

相关问题