tab VS space, the pointless war

元旦无事,看了一部美剧《硅谷》。先问一个问题:编程中tab和space你喜欢用哪一个呢?
故事发生在高科技产业云集的美国硅谷,在这里,最有资质成功的人往往却是最没有办法处理其“功成名就”的人,本剧主人公理查德正是这样的人。
故事描述四个不善社交但绝顶聪明的计算机程序员受到依靠互联网站发家的百万富翁的特殊照顾。他们可以免费住在他家中,但他们的项目日后如果获得成功,他要拿10%的股份。这些人没能说动一名亿万富翁投资他们的项目,于是各自回到原先的工作岗位。这名亿万富翁和其中一名计算机程序员供职的公司很快意识到他们的新型网络搜寻运算法则具有无法估量的商业潜力,于是一场白热化的争夺战开始了。
有一集剧情是:程序猿和程序媛就space和Tab以及vim和emacs展开争论....然后
程序媛: Kids? We haven't even slept together....
程序猿: Guess what? It's never gonna happen now. Because there's not way I can be with someone who ... (模糊) space over tab.
然后程序媛就猛敲space把程序猿赶走了....
然后程序猿甩下一句: One tab saves you eight spaces.
之后就因为试图一步跨下八个阶梯而摔了。。。






缩进,到底是tab还是space呢?
其实这好像是问 Android 好还是 iOS 好,Windows 好还是 Mac 好,编辑器好还是 IDE好,中划线好还是下划线好…
那就说分别说一下:
为什么要用 Tab?
1.按键次数: 所有我看过的学习教程中,形容代码缩进都是说,按一个 Tab 缩进而不是按 4 下空格.
2.语义: Tab 代表”缩进一个level”,而空格有很多含义
3.文件更小: 一个 Tab 和一个空格占空间是一样的,4个空格的话就是4倍
4.宽度可调整: 常见的就是一个 Tab 等宽于 4 个空格,靠谱编辑器都可以自定义
为什么要用空格?
1.在所有编辑器和系统里表现都是一致的,宽度只决定于显示字体
2.可以让作者更精确控制视觉呈现 有些恶趣味的程序员会画字符画
3.语义: Tab 是制表符,用 Tab 就和用 Table 布局一样不科学
4.压缩后文件更小:因为空格不可避免,用 Tab 的话要压缩2种字符(脱离实际情况偷换概念)
为什么要混着用?
简单 爷想怎么用就怎么用
Tab 党搞不定行末注释对齐 他们是行首缩进用 Tab ,行末注释对齐用空格
但还是感觉tab更好一点,虽然自己之前编程中一直都是使用space。
总结一下如下:
1⃣Tab 不需要依靠某一个工具,所有编辑器都知道 “如何插入一个 tab”
2⃣Tab 占的体积更小。
3⃣Tab 的宽度可以因人而异,更个性化。
4⃣Tab 更利于多人协作。
5⃣Tab 更容易选中,还在为漏选一个 space 而烦恼?
6⃣Tab 现在在网页上不再难看,过去网页上一个 tab 显得非常宽,而现在 CSS3 的 tab-size 属性解决了这一痛点。