源代码中的TAB字符是否错误?

时间:2012-02-10 17:02:46

标签: php javascript coding-style standards

我对Zend和PEAR PHP编码标准都非常熟悉,而且我之前的两位雇主在代码库中没有允许使用TAB字符,声称可能会被构建脚本或其他东西误解(类似的东西) ,老实说,我不记得确切的原因)。我们都设置了IDE来将TAB爆炸到4个空间。

我很习惯这个,但现在我最新的雇主坚持使用TAB而不是缩进空间。我想我不应该太在乎,因为当我点击 Tab 键时,我可以告诉PHP Storm只使用TAB char,但是,我知道。我想要空格,我想要一个有效的论证,为什么空格比TAB更好。

所以,个人偏好,我的问题是,是否有合理的理由避免在我们的代码库中使用TAB

请记住,此编码标准适用于PHP和JavaScript。

6 个答案:

答案 0 :(得分:28)

标签更好

  • 更清楚到读者每段代码的级别;空间可能含糊不清,特别是在不清楚是否使用2空格标签或4空格标签时
  • 从概念上讲更有意义。缩进时,您需要一个制表符而不是空格。该文档应代表您在键盘上执行的操作,而不是文档内设置。
  • 标签不能与扩展的代码行中的空格混淆。特别是当启用单词扭曲时,在一系列单词中可能存在空格。这显然会让读者感到困惑。它会减慢配对编程的速度。
  • 标签是特殊字符。在IDE上启用查看特殊字符时,可以更轻松地识别级别。

所有编码员注意:只需在Windows,Mac或Windows上按CTRL + ALT + L,即可使用任何JetBrains编辑器(例如PHPStorm,RubyIDE,ReSharper,IntelliJIDEA等)在标签和空格之间轻松切换Linux操作系统。

答案 1 :(得分:22)

  

是否有合理的理由避免在我们的代码库中使用TAB?

我曾咨询过很多公司,而且没有一次遇到没有在各种源文件中混合使用标签和空格的代码库,并且没有曾经有过这是一个问题。

优选的?肯定。

合法,因为符合既定规则,原则或标准?否。

修改

  

我真正想知道的是,TAB是否有任何问题,为什么呢   Zend和PEAR都会特意说他们不被允许吗?

因为他们的偏好。他们希望遵循的惯例是保持一致性(以及命名和支撑样式等)。没什么。

答案 2 :(得分:19)

空格比制表符更好,因为不同的编辑器和查看器或不同的编辑器设置可能会导致制表符的显示方式不同。如果您的编程语言将制表符和空格视为相同,那么这是避免制表符的唯一合法理由。如果某些工具在选项卡上发生阻塞,那么从语言的角度来看,该工具就会被打破。

即使团队中的每个人都将他们的编辑器设置为将标签视为四个空格,当您必须在某些工具中打开源代码时,您将获得不同的显示。

答案 3 :(得分:6)

最重要的是担心一致总是使用相同的缩进方案 - 混乱的标签和空格混合在一起是生活地狱,而且比纯粹的标签或纯空格更糟糕。 因此,如果项目的其余部分使用标签,您也应该使用它们

无论如何,Tabs vs Spaces并没有明显的赢家。太空支持者说,只使用空间来实现一切都是一个简单的规则来实施,而Tabs支持者说使用标签进行缩进和空格对齐允许不同的开发人员显示他们觉得更舒适的标签宽度。

最后,tabs-vs-spaces不应该是出价协议。我似乎唯一一次认为人们认为其中一个替代方案严格要好,另一个是缩进敏感语言,如Python或Haskell。在这些混合选项卡和空格中,可以很难改变程序语义,而不仅仅是使源代码看起来很奇怪。

答案 4 :(得分:2)

自从我的第一个CS课程以来,标签一直是禁忌。原因是,制表符基本上就像变量。不同的IDE可以将TAB定义为不同数量的空间。从Visual Studio / NetBeans / DevC ++的角度来看,所有人都有能力根据所需空间的数量更改TAB的“定义”。因此,如果您定义了4个空格,则无法知道我的IDE是说3个空格还是5个空格。因此,如果有人碰巧使用基于空格的缩进样式而其他人使用TABS,则格式化可能会全部搞砸。 然而,作为一个反点,如果'标准'总是使用制表符,那么它真的无关紧要,因为格式化将全部显示为相同 - 无论定义的空格数是多少。 但是所有需要的是一个人使用空格,格式化看起来很可怕,让人感到很困惑。使用空格时不会发生这种情况。此外,如果您不想在函数/方法之间使用相同的间距等,会发生什么?如果你喜欢在某些情况下使用4个空格而在其他情况下只使用2个怎么办?

答案 5 :(得分:0)

我见过构建脚本,它解析源代码并生成文档甚至其他代码。这些脚本通常依赖于处于预期格式的代码,并且通常意味着使用空格(或有时使用制表符)。也许可以通过检查选项卡空格来修改这些脚本 以使其更加健壮,但通常情况下,您仍然坚持使用您所拥有的内容。在这种环境中,一致的格式化变得更加重要。