TAB vs SPACE 是一个争论不休的话题. 不过, 对于大部分编程语言, 混用 TAB 和 SPACE(空格) 缩进也可以正常工作, 除非你用的是语法非常傻逼的语言如 Python(仅仅是语法傻逼, Python 的对象模型和库还是很有用的, 大家可以试试 Cpy 编程语言 - 用 C 语言语法写 Python 代码).
首先, 我遇到的大部分项目和大部分程序员, 都将 TAB 设置为 4 个字符的宽度, 所以对于缩进来说, 用 TAB 还是 SPACE, 显示效果都是一样的. 当然, 对于使用了所按即所得的编辑器的人, 删除 4 个空格要按 4 次键盘, 确实很烦人.
不过, Google 的编程风格是用 2 个空格来缩进, 我比较感兴趣 Google 的工程师是敲两次空格键来缩进, 还是设置了按键精灵, 自动把 TAB 输入转成两个空格. 反正, 用 2 个空格还是用 4 个空格, 由他们去争论吧. 如果用了 TAB, 至少没有数量上的争论, 没人会愚蠢到用多于两个 TAB 来表示一级缩进.
其实, 用 SPACE 的主要目的, 是为了让代码在竖直空间上对齐(列对齐), 包括注释和赋值, 如:
a = 1; // 1 abc = 200; // 2 aa = 3; // 3
但是, 这不是在缩进, 而是在对齐, 所以在这个地方讨论 TAB vs SPACE 是没有意义! 什么是缩进? 显然缩进是对于行首来说的. 对于缩进来说, 还有什么理论反对 TAB? 难道你怕麻烦不想按 4 下空格键? 还是你的文本编辑器不够智能到自动区分缩进和对齐?
如果你用 4 个空格, 哪天要拷贝 Google 的 2 个空格的代码, 不是很烦人吗? 如果 Google 也用 TAB 来缩进不是很好吗?
所以, 用TAB缩进, 用SPACE对齐.
嘛,不要强迫其他人看的自己喜欢而别人不一定喜好的的东西……真实好论点,去和制定规范的家伙说去嘛……
不过我仍然喜欢空格,原因?
除了我之前说过的固定外,我发现你纠结在击键次数上……现代的编辑器上,用空格和用tab缩进,都是按下一个tab解决的事情。
嘛,到最后,这个话题也是和诸多的程序员中经久不衰的话题一样啊……随便你了,-异教徒-(试试看支不支持删除线……) Reply
客气了,我不是那么珍惜的动物……我一直是用一次击键(tab)得到4个space缩进的普通程序员……(之前的回复中都只是说明一下,不论编码规范怎么改,要让行首从n个空格变成m个空格都是很容易的……)
如果有幸我的工作需要用到google贡献的开源代码,我会根据其开原协议,做一些不同的处理,
比如:GPL系列的,以及大多数情况下,我就原封不动,让他们依然是两个,反正又不是我的代码。
更宽松的,比如mit,且确实有必要的情况下,写个sed把行首处理一下,分分钟的事情
但是我一定会因为懒,而决定继续让这些代码使用2空格缩进…… Reply
我的原则是, 简洁. 用较少的工具, 做较少的配置. 这样, 当你需要同时在几十台服务器上工作时, 直接上手. Reply
所以对于你说的那种更多的人,更多的设备,更大的代码量的情况,我没有经验。
但即使没经验,我觉得,参与这种合作,首先得服从规矩的制定者,它说要用tab,我就绝对就不用space。
而这类问题,显然如果参与的人数足够多,即使制定者一开始没有规定,逐渐的也会成为项目的风格固定下来,后来参与者,也只有接受的份,也是不能自说自话的,那么该用tab还是space也是唯一确定的。
所以,我觉得我们之前的讨论应该都只针对小的甚至是个人的项目。 Reply
哈哈哈,我的代码写的很烂的,你看,那些精妙的部分,都是2个空格缩进的吧,那些都是我从开源项目里拿来的,那些4空格缩进的才是我写的……哈哈哈
等等,不要误会我会在同一个文件里混用2空格和4空格,那样会执行出错的……(python……)
想起来,go fmt好像会自己处理一下……我要去数数它到底把我的代码变成几个空格了…… Reply
而自动的把行首4个space替换成2个,有各种方法可以一次性的解决。 Reply
首先,我没有说过要将行首的tab转换成空格,我是一开始就用空格的。
然后,我说的不是要不要缩进,我说的是视觉上,用tab缩进,这个编辑器显示4个字符宽度,那个编辑器显示2个字符的宽度,会很奇怪。
其次,我说的是,用空格来缩进,可以得到的好处是:1.缩进(tab也有),2.视觉上的固定(我说是2个,就绝对不会是4个,tab不能保证)
最后,如果将来编码规范变了,只要替换行首的空格数量就行
嘛,最后这一点,对于使用tab来说就是只要修改编辑器对tab解释的宽度就行……但是,谁能强制程序员的编辑器对tab如何解释呢
以及,只要公司的vcs支持,写个插件(比如git的hooks),在代码提交的时候自动按照行首空格要求对提交的代码处理一下,4空格还是2空格的问题就解决了。 Reply
“你用两个空格表示一级缩进, 不错. 请问你按两次空格键吗? 请把TAB键抠掉. ”
你是一只在用notepad写么?不论是notepad++,sublime text,vim,emacs,都支持你按下tab建,自动用你自定义的n个空格替换的好嘛……
“还有, 你用2个空格, 要是在Google, 不错, 要是在别的公司, 你完蛋了…”
理由同上,我完全看不到我为何会完蛋啊……甚至,是在不行,写一段sed很难么? Reply
发现自己变成啰嗦的老太了,好像写了很多,其实都是一样的内容在重复……抱歉啊。 Reply
才想起作者除了说用tab缩进(我不喜欢)之外,还说了用空格对齐啊……
对齐这活我从来不做……所以我的回复里都把这个给忽略掉了……
但是我想想了一下,用空格对齐,确实仍然比tab对齐好,不会被编辑器的解释而动掉。
所以怎么想都仍然是一致的用空格(行首的缩进,和语句中的对齐)
何况如@jacky所说,有那么多“强大的”编辑器可用。 Reply
自己感觉,调整缩进有工具,但是调整对齐没有。所以对齐还是TAB好
缩进的话,不同的编辑器对TAB的解析太不一样了(特别是行首的),还是空格好
PS:对齐是TAB的标准用途啊(不用去算几个空格,多行自动对齐)! Reply
那么就是,不去接受,不去学习事实上更好的工具,是程序员的罪过
有那么多可以忽略行首,行尾空格的比较工具不用,自己拖累自己的工作效率,怪谁呢。