Page 1 of 1

为什么程序员们会争论空格与制表符?

Posted: 2024-03-29T09:20:49+00:00
by expl
为什么程序员们会争论空格与制表符?

也许会有很多人奇怪为什么程序员人总会争论一些奇奇怪怪的东西?另外制表符又是什么鬼?
要理清这些问题并不难,难的是如何不以自己的本位思想去考虑别人的问题。
这个世界并不是只有你自己,也并不是全世界都必须围绕着你运转。这是实实在在的现实,但是在儒教文化圈里是完全不能被接受的,尤其对是那些"官老爷们"来说。
所以要理清程序员们在讨论的问题时,就需要以程序员的实际工作场景去思考问题。

程序员们的日常工作就是为各种各样的设备或者应用场景编写程序,而编写程序就离不开编辑器。总不能让程序员们拿着纸笔写吧,那样写出来的东西也没法让设备识别并执行啊。当然,这里会有一批人会说"可以不用编辑器,而是用IDE",当然这么说也没错,但是你没意识到这个被称作"IDE(集成式开发环境 integrated development environment)"的软件的本质是什么,它本质上就是在编辑器基础上又集成了语法提示、自动缩进、语法高亮、控制台输出回显、编译器调用快捷方式、版本控制系统操作...等等的附加功能而已。其核心还是那个让程序员们可以"写作"的编辑器。

注:这里所说的编辑器是指的纯文本编辑器,是可以忠实的记录程序员们所写下内容的编辑器。而不是word那种会添加一些乱七八糟的不知是什么东西的"编辑器"。

那么本文的标题中所说的争论的焦点 是该用空格呢?还是该用制表符呢? 这其实就是说的在编辑器上附加的那个缩进功能。

什么就缩进呢?就是一行程序或者注释文本,在这一行的开头空出来的距离,它对程序的运行没有意义,它的意义在于让程序员自己或者其他程序员在查看程序的时候能方便的理清这个程序的层次结构。这有点像小学时语文老师教给我们的每一段的开头空两格。这仅是一个方便理解入门的类比,实际编程中要根据不同的场景和层次结构来选择合适的缩进。

为什么要让其他程序员看呢?这就是一个关于如果团队协作的问题了。我们以后有时间了的话会单独讲解。

那么既然都是空格为什么会有争论呢?这就要从我们日常使用的键盘说起了。
键盘主区域最下方中间那个长长的按键被称为空格键,按它一次就会产生一个字符宽度的空位,(这里说的是在编辑器中的情况,如果你是在word中或者在微信中输入的情况,或者你正在用某些行为奇怪的输入法的情况,那不在本文讨论的范围内),将来不管你把这个文件复制到哪里或者用什么样的工具打开这个文件,在你按下空格键的地方都会老老实实的显示一个字符宽度的空位。
再把视线从键盘的左上角开始看,最左上角有一个非常孤独的按键,它不像键盘上的其它按键,它的周围没有紧临的按键,而是被设计成非常孤独的样式。它上面写着Esc。顺着它往下找两行,你就能看到一个上面写着Tab的按键。这个按键就是今天的另一个主角:制表符。在传统的打字机时代它就存在,所以不要以为它是新鲜事物。它的作用是让字车移动等宽的宽度,这在当年的打字机时代就能画出一个规整的表格,制表符这个名称就是这么来的。在现在的电子计算机时代,已经不存在字车这个部件了。现在按下一次Tab键只会在文本中插入一个\t对应的ASCII代码。正是这个\t让程序员们产生了争论。

为什么\t会产生争论呢?因为现在不同的编辑器、IDE对这个\t的显示处理的方式并不一样,有的会默认一个\t等于4个半角字符,有的默认它等于8个半角字符,还有等于6个的...等等等等。
这就造成了同一个程序在不同的开发环境中的显示效果不一样。
对于这样的情况即使放在一个算不上中等规模的程序中,也将是十分折磨人的。

既然是争论,那就有说好的,有说坏的。

先来看看说好的。\t 在同一类型的编辑器中显示效果一样,并且可以提高输入速度,在长前导缩进中更能体现中优势。
再来看看说不好的。 \t 在不同类型的编辑器中显示效果不确定,为了可读性就需要手动更改编辑器的缩进设置,或者用代码格式化工具(比如astyle之类的)进行代码格式化。这就造成了多余的麻烦。

这样看来确实两边说的都有道理。但是貌似是在争论一件事,但是却是在讨论不同的方向。
一个是在说在同一类型的编辑器中使用的情况。
另一个是在说在不同类型的编辑器中使用的情况。

所以,到此我们可以轻易的分辨出应该如何选择缩进模式了:
如果,这个程序仅在使用相同款编辑器的程序员们之间分享、传阅、使用的话,那么用制表符是一个不错的选择。
如果,这个程序的开发需要涉及很多使用不同类型编辑器的人,很多不同的部门,甚至是跨公司的协作,又或者是一个开源协作的程序的话,那么用空格缩进而不是用制表符缩进将会让协作更流畅。

大家对到底应该使用空格缩进呢?还是应该使用制表符缩进呢?有什么看法,都可以参与讨论。