制表符 vs 空格缩进

37
如果您阅读任何编码样式指南,很大的可能性是您会看到推荐使用空格而不是制表符进行缩进的建议。一些指南明确表示:永远不要使用制表符。
我知道关于制表符和空格的问题存在争议。这绝对不是我的本意。然而,我想问您是否有任何好的理由支持此建议。为什么每个人都说用空格来缩进代码是最好的方式?

3
顺便说一下,如果有人投票关闭问题,知道为什么会很有帮助。谢谢! - Ionuț Staicu
3
这个问题在PSE上已经被讨论得很透彻了:http://programmers.stackexchange.com/questions/57/tabs-versus-spaceswhat-is-the-proper-indentation-character-for-everything-in-e,例如。 - Flexo
1
可能是重复的问题:Microsoft 内部编码指南:不要使用制表符 - Tony Delroy
1
"Space Won"(https://lostechies.com/jimmybogard/2012/03/07/tabs-versus-spaces-spaces-won/)有很充分的论据支持(由http://evadeflow.com/2011/03/tabs-vs-spaces-in-the-21st-century/支持)。基本上:你可以只使用空格,这是可以的。空格在任何地方(每台计算机和每行中的每个位置)看起来都一样。制表符不能用于对齐,只能用于缩进。这对于教新手程序员来说相当令人困惑。而且在其他计算机配置上看起来也不同。所以,保持简单:2个空格。 - DrBeco
1
使用空格的开发者比使用制表符的开发者赚更多的钱 - koppor
显示剩余10条评论
2个回答

9
使标签看起来正确很大程度上取决于源代码可能被显示或打印的所有软件的配置/选择。如果您有一组受限制的此类软件,并且发现这对您来说不是实际问题,那就太好了-如果您看到价值,请继续使用。但是,请注意,当使用制表符缩进一行,然后在您希望基于开放括号位置、引号等进行缩进的后续行上继续时-您将以一种视觉上无法验证正确性的方式混合制表符和空格(除非您的编辑器以不同方式显示制表符)。抵消这一点,使用箭头键跨越制表符或删除可能更快,但也更令人困惑和沮丧。不同人使用不同制表符宽度清洁地处理相同的代码很少见,这也许是制表符的主要优势。个人而言,我使用空格。

5
混用制表符和空格的争论为+1。 - Marsellus Wallace
3
然而,有人可能会说,试图在行之间对齐东西本来就是一件愚蠢的事情,因为由于重命名,您尝试与之对齐的第一行的部分可能会发生变化。请参阅Kevlin Henney的演讲《七种无效编码习惯》中关于“完美”替代方案的讲解,这将使任何“对齐东西”的借口都不成立。 - Jacob Zimmerman
1
@JacobZimmerman 听起来又是一场宗教战争 :-). 就我个人而言,我喜欢保持我的选择,并在任何特定的代码中做出我认为总体上最优的决策。 - Tony Delroy
2
@JacobZimmerman:如果有一个非常好的理由,那么这个问题就不会成为无休止争论的话题了——尤其是在使用不同编辑器、格式化工具、打印系统等的大型多元团队中,仍然可能存在一种稍微但显著更好的选择。Henney的观点同样适用于80列代码编写者,但在某些环境下,由于所使用的编辑器和工具,进行重新格式化的努力是一个净胜利。总之,在他们的代码环境中有充分理由的读者不需要在这里寻求指导。 - Tony Delroy
2
最近我就这个话题进行了一场辩论,并了解到对于一些视力障碍者来说,使用空格可能是一个真正的无障碍问题:https://www.reddit.com/r/javascript/comments/c8drjo/nobody_talks_about_the_real_reason_to_use_tabs/简而言之,他们使用制表符以适应自己的需求,否则他们需要在提交之前始终将空格转换为制表符,然后重新将制表符转换为空格。 - fcole90
显示剩余2条评论

8
标签在不同的电脑和打印机上可能有不同的大小。代码在原始电脑上看起来很好,但在其他电脑或打印输出上,间距可能看起来很奇怪。
使用空格,代码将在任何计算机上都看起来相同。

18
是的,但选项卡的优点在于您可以设置选项卡的宽度而不实际影响源代码。感谢打印解释。我没有考虑到这一点(因为我不打印代码)。 - Ionuț Staicu
我发誓我不想在这个问题上引发争吵。我想听更多有关使用空格而非制表符的优点。(个人而言,我使用空格来进行缩进,主要是因为我遵循指南,但有些朋友极力要我改用制表符;除了“大牛们都这么做”的论据外,我无法提出其他有效的论据) - Ionuț Staicu
通常情况下,[tab]等于4个[space],但根据Starkey所述的本地设置,也可以是4.5个[space]。然后你再加入非比例字体,你就可以看到珍珠港2号导弹雄伟地升入天空了... :) - sschrass
13
如果两个开发者有不同的缩进偏好,他们可以将制表符宽度设置为任何他们喜欢的尺寸。然而,对于空格来说,这是不可能的。因此,“使用空格代码将始终看起来相同”的论点是无效的,因为许多开发者使用不同的偏好,目的并不是让代码看起来一样。 - Marcos Pereira
无论您使用制表符还是空格,Google在其编码风格中使用空格并不意味着您不能使用制表符。做出让您和其他人更易于理解的代码。 - mumair
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接