你喜欢制表符还是空格?

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

Opensource.com

制表符与空格:在开发社区中,这似乎是一个由来已久的争论,但在最近几周,人们对此重新产生了兴趣,因为 Stack Overflow 发布了一份报告,显示使用空格的开发者可能比使用制表符的开发者赚更多钱。 谁知道缩进风格会对你个人产生如此大的影响呢?

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

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

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

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

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

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 语言时长大,使用制表符编写代码效率更高。 现在切换到空格将是一个相当大的转变,所以我只是将制表符按键设置为“软制表符”,它会将制表符按键转换为多个空格(*2 或 *4,无论哪个更喜欢)。 问题解决了。

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

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

以前,我只是为签入/签出函数设置了别名,以便在签入时使用标准设置的 indent 处理代码,在签出时使用用户设置的 indent 处理代码。 每个人都得到了他们喜欢的方式,并且所有内容在仓库中都是统一的。

这消除了所有风格争论。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.