你喜欢制表符还是空格?

对于某些人来说,这似乎是一个微不足道的问题,但对于我们这些整天与代码为伍的人来说,制表符和空格之间的选择绝非小事。
371 位读者喜欢这篇文章。
A bunch of question marks

Opensource.com

制表符与空格:在开发社区中,这似乎是一个由来已久的争论,但在过去几周内,随着 Stack Overflow 发布一份报告,显示使用空格的开发人员可能比使用制表符的开发人员赚更多钱,这个问题再次引起人们的兴趣。谁知道缩进风格会对你个人产生如此大的影响?

现在,与任何将技术细节与财务结果联系起来的研究一样,在进行广泛概括之前,你需要理解很多细节和注意事项。或者换句话说,不要期望今天改变你的编码风格就会在明天带来加薪。

事实上,在阅读了该研究之后,一位数据科学家 Evelina Gabasova 进行了一些额外分析,并得出了略有不同的结论,这感觉更准确一些:“人们使用 Git 并为开源做出贡献的环境更可能与更高的薪资和空格相关联,而不是与制表符相关联。” 换句话说,如果你在一家使用版本控制并向上游提交开源代码的公司工作,那么从统计学上来说,你更有可能成为空格使用者和高收入者。

但是,无论你的个人偏好如何,我们都希望你遵守你所贡献的开源项目的风格指南;许多项目对编码风格要求非常严格。我们也希望你不要对其他人的编码风格过于在意。

无论如何,请在下面的评论中告诉我们你更喜欢哪种风格,以及为什么。

标签
User profile image.
Jason 是 Opensource.com 的工作人员和 Red Hatter,工作时间为 2013 年至 2022 年。此个人资料包含他在此期间与工作相关的文章。其他贡献可以在他的个人帐户中找到。

13 条评论

任何时候都支持 4 个空格。

我对空格略有偏好。Python 对缩进非常挑剔,有时在缩进看起来没有意义时会发出警告。我经常使用 Emacs,它的 Python 模式将按键 Tab 转换为空格,所以有点模棱两可。我有时使用 Kwrite,并且在两个编辑器之间切换时可能会出现一些问题。
话虽如此,由于各种原因,我有时会调整缩进中的空格,以便它们在一个条件到另一个条件之间更好地匹配。

我使用空格,但有一个例外:makefile 文件。Make 要求行首使用制表符,否则它无法理解命令。这是 Make 过时且愚蠢的另一个原因。
你认为 emacs 和 vim 非常有争议,那就开始询问关于 Make 和构建系统的问题。非常有争议,而且非常不愚蠢和不琐碎。构建依赖关系可能超出了静态分析的范围,因此 Make 根本无法工作。

make 中制表符与空格的区别是最早报告的 UNIX 错误之一。它最初并非如此设计,但 Stu Feldman 说他从未修复它,因为那时大约有十几位用户,修复它会破坏他们的 makefile 文件。Stu 从那时起一直为此事饱受指责。

回复 作者 carlM (未验证)

在大多数情况下,除了 Python 和少数其他语言外,空格是为了方便人类阅读代码。编译器并不在意。因为目的是帮助人类,所以使用制表符是有意义的。使用制表符可以让阅读代码的特定人员设置最适合他们的制表位。不同的人在不同的设备上可能有不同的偏好。制表符可以让人们轻松地以他们喜欢的方式查看代码。空格是为控制狂准备的,他们认为其他人不应该有权以最适合他们的方式查看代码。这就像卖给别人房子,却拒绝让新业主在房子里放置自己的家具一样。空格还会增加文件大小。没有逻辑理由使用空格,只有情感上的理由。

我喜欢空格的原因是制表符通常会浪费太多空间。
你可以在更小的可读空间中容纳更多可读的代码。

制表符
缩进正是制表符的发明目的。我不明白为什么有人会想为此目的使用空格。我也碰巧喜欢 Makefile 文件。还有 vi.... :-)

源代码和脚本中只使用空格(当然,在输出打印语句中使用制表符对齐文本的情况除外)。

配置文件中使用制表符来对齐字段。这可能是唯一应该使用制表符的地方,并且应该优先于每行数量不同的多个空格。

使用制表符或使用空格,两者都很好。

但是如果你要混合使用制表符和空格,请不要重新定义制表符的含义,使其不是下一个 8 的偶数倍。

将你的 IDE 设置为将制表符转换为空格,并避免在生产环境中使用 vi 并导致格式完全破坏的麻烦。我从小学习 C,并且使用制表符编写代码更有效率。现在切换到空格将是一个相当大的转变,所以我只是将 Tab 键设置为“软制表符”,这会将 Tab 键转换为多个空格(*2 或 *4,以个人喜好为准)。问题解决了。

制表符是打字机的产物。它的存在是为了让打字员快速生成多个空格。不幸的是,最初的计算机字母表是对打字机键盘的盲目复制。制表符字符的存在及其引发的冲突应该成为一个教训,说明为什么盲目复制之前的模型是一个坏主意。

很长一段时间以来,我一直告诉 EMACS 将所有制表符转换为空格。这是出于非常实际的原因。早在八十年代,终端的制表位默认设置为八个空格,但该约定并未得到严格执行。为了保持对打印输出外观的控制,最好使用空格进行缩进。

很久以前,我只是为签入/签出功能设置了别名,以便代码在签入时通过具有标准设置的 indent 进行处理,并在签出时通过具有用户设置的 indent 进行处理。每个人都得到了他们喜欢的格式,并且在存储库中都是统一的。

这消除了所有风格争论。

Creative Commons 许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.