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

Mav*_*ick 19 javascript php standards coding-style

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

我很习惯这个,但现在我最新的雇主坚持使用TAB而不是缩进空间.我想我不应该真的关心,因为我可以告诉PHP Storm在我按下Tab键时只使用TAB字符,但是,我知道.我想要空格,我想要一个有效的论证,为什么空格比TAB更好.

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

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

use*_*980 29

标签更好

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

所有编码人员都要注意:只需在Windows,Mac或Linux上按CTRL + ALT + L,即可使用任何JetBrains编辑器(例如PHPStorm,RubyIDE,ReSharper,IntelliJIDEA等)轻松切换选项卡和空格.

  • 是的,我知道只有****合法的原因:这是你在使用存储库时,将空格转换为制表符将导致git将它们视为更改.在这些情况下,您应该使用repo提供的编码标准. (3认同)

web*_*ave 22

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

我曾在许多公司协商,没有一次有我碰上一个代码库中没有具有某种不同的源文件中的制表符和空格的混合物并没有一次有这是一个问题.

首选?当然.

合法的,符合既定的规则,原则或标准?没有.

编辑

我真正想知道的是,如果TAB没有任何问题,为什么Zend和PEAR都明确表示他们不被允许?

因为这是他们的偏好.他们希望遵循的惯例是保持一致性(以及命名和支撑样式等).而已.

  • 我想你不用Python然后:) (5认同)
  • 你为什么要投票结束这个问题,然后提供一个希望获得积分的答案?那是意味着. (5认同)
  • 那不是发生了什么事.当有人在评论中提出建议时,我投票将*问题迁移到programmers.stackexchange.com.然后一位钻石主持人出现并将其关闭为*没有建设性.*我无能为力. (5认同)
  • 我个人会接受这个答案.至少有偏见,并解决了为什么采用标准不允许Tabs的问题. (2认同)

Fre*_*Foo 19

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

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

  • 不,这就是为什么制表符比空格更好的原因(因为开发人员可以配置他们的编辑器以他们喜欢的大小显示缩进,同时拥有一致的代码库). (30认同)
  • 如果您使用非等宽字体,则选项卡明显优于空格:) (5认同)
  • @larsmans:你的答案是"空间更好",你的评论是"标签更好的原因可能有些原因".你为什么不把它变成一个pro/con列表来完成你的答案并解开它,所以OP实际上看到了两者的好处,而不是你的单一论点.你的+ 1s显然是来自空间的粉丝,因为这里真的缺乏内容. (3认同)
  • 值得注意的是,大多数"编码标准"禁止使用标签,以及缩进有意义的(元)语言(例如python,yaml) (2认同)

hug*_*omg 6

最重要的是要始终如一地使用相同的缩进方案 - 将标签和空格混合在一起是生活的地狱,并且比纯粹的标签或纯空间更糟糕.因此,如果项目的其余部分使用选项卡,您也应该使用它们.

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

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