为什么有些语言建议使用空格而不是制表符?[关闭]


10

也许我一个人在里面,但是没有什么让我烦恼的,就像人们缩进而不是制表符。与打字SpaceSpaceSpaceSpace相比,打字更容易,更直观Tab吗?当然,制表符宽度是可变的,但它比空格更能表示缩进空间。退格是一样的。退格一到四次?

为什么像Python这样的语言建议在制表符上使用空格?


24
您可以将大多数编辑器配置为在点击时插入空格而不是制表符tab。如果您无法在自己喜欢的编辑器中进行配置,则需要一个更好的编辑器。
亚当李尔

一件事,可以设置许多编辑器,以便在按下“ Tab”键时插入4-8个空格,因此就像Tab键一样,它只是一个按键。
Echo说恢复Monica

2
它仍然无法回答我的问题。为什么用空格代替制表符?当然,您可以将编辑器配置为插入空格而不是制表符,但也可以插入带有空格的制表符。问题是您为什么要这样做?有什么可能的好处?
2011年

4
@Tk空格是可以更改的明确选项卡
Martin Beckett

3
@TKKocheran,因为当您不小心将选项卡插入字符串中时,选项卡会对输出产生时髦的作用。
zzzzBov

Answers:


15

一致性,主要是。

另外,偶尔会出现一些实际使用空白的东西-例如Python:告诉我,如果我运行以下代码片段会发生什么?

def foo():
    print "a"
    print "b"

答案:您将收到一个IndentationError,因为这两个打印语句的缩进程度不在同一级别,因此不属于同一代码块。(第一个使用制表符,第二个使用空格)

然后令人沮丧的情况是,一个开发人员的编辑器的选项卡设置为8个空格,另一个开发人员的选项卡设置为4个空格,而某人由于某种奇怪的原因使用了5个...在一个工作站上看起来很正常,但是当它签入时SVN和其他人进行了更新,他们会看到可怕的,混乱的混乱。

因此,无论是空格还是制表符,这都是始终保持一致的两个很好的理由。

但是,空格允许对缩进的控制比制表符更多,并且不需要在编辑器中进行任何特殊配置即可使其起作用。(尽管可以使它更容易-例如在vim中,set expandtab只要您在按Tab时就插入空格)

编辑:有趣的是,该网站似乎已将我的标签页标准化为空格,以便浏览器可以正确显示它。单击“编辑”以查看原始的,包括的标签;)


5
只有在编辑器中使用tabs-to-spaces选项时,才会出现选项卡问题(尤其是可怕的SVN混乱)。如果您和您的团队同意禁用tabs-to-space选项,则选项卡将始终是任何视图中的选项卡:然后,它只是您希望在编辑器中显示的宽度的选择。
HorusKol 2011年

@HorusKol不,可怕的混乱是因为空格和制表符混合在一起。我想我做的不够明显(请参阅“可怕的,可怕的混乱”行之后的单行句子)。因此,当将空格设置为等价于4个空格时,这些空格就可以与制表符很好地对齐,但是当其他人查看该空格时(无论是否设置了制表符到空格),它们都会变得一团糟。
Izkata 2011年

4
我明白了-嗯,您需要为团队设定一个准则-要么一直使用空格,要么使用制表符...无论哪种方式,制表符到空格都是一个坏主意;)
HorusKol 2011年

21
这就是为什么我认为对空白有意义的语言的想法是设计缺陷。您看不到的东西永远都不会破坏您的代码。
保罗·内森

仅作记录,我同意@PaulNathan
Izkata 2011年

11

是关于Python中的缩进和空格的很好的讨论。从文章:

最好完全避免使用制表符,因为制表符的语义在计算机世界中不是很明确,并且可以在不同类型的系统和编辑器上完全不同地显示。此外,在复制和粘贴操作期间,或者在将一段源代码插入网页或其他类型的标记代码期间,制表符通常会被破坏或错误转换。

至于关于两次或多次按下空格键或退格键的争论,由于大多数源代码编辑器只需按一下Tab键即可插入可配置数量的空格,并且类似地不缩进,因此当使用空格进行缩进。

对我自己来说,我更喜欢空格,因为无论我在IDE,或less,还是记事本中查看代码,代码总是以相同的缩进量显示。即空间更便于携带。


3
回复:“无论我是在IDE中,还是在更少的版本中,还是在记事本中查看它;也就是说,空间都更具可移植性” –这是我所听过的关于空间的最佳论据。我本人是一个“制表符”人员,但偶尔不喜欢看到以意外方式呈现的制表符分隔的代码。
Aerik

2

在Python中,缩进控制程序流,因此至关重要。
如果使用带制表符格式化的代码并进行复制,以使制表符更改或丢失,则代码的结构将被破坏。空间永远是空间=更安全。

如果您担心空格键的磨损,可以将编辑器设置为将制表符自动转换为空格。


我更担心的是,浪费时间四次键入空格或退格键,而不是一次完成两个键。
Naftuli Kay

是的,但是Python很奇怪。我从来没有遇到过其他关心空间的东西。
Aerik

@TKKocheran哦,这是您真正关心的吗?我不知道他们是怎么做到的,但是我工作中的vim设置为使退格可以完全透明地返回到最后一个制表位,跨越多个空格,完全透明
Izkata

.vimrc能帮我
丢掉吗

1
@TKKocheran找到了它-仅仅是set softtabstop=4,而TAB和BACKSPACE都将使用4个空格作为选项卡。(好吧,对于每个制表符,将宽度视为4个空格)
Izkata 2011年

2

应该始终使用空格,因为单独的制表符不足以适应多种样式,并且混用制表符和空格(几乎)总是会产生绝对的混乱。

对于通常需要空格的一种样式的示例,请考虑以下内容:

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

除非您愿意将所有功能重命名为选项卡大小的正好倍数(括号中减去一个),否则仅使用选项卡就不会这样做。

至于制表符和空格的混合,您几乎立即遇到一个严重的问题:制表符的扩展方式并不一致。某些软件将制表符视为等同于特定数量的空格。其他软件将以特定数量的空格来扩展制表符-例如,制表符后的项目将始终以(例如)8的倍数的列号开头。

即使可以确保空格不会混入制表符,您仍然会遇到问题:制表符在使用可变宽度字体时效果也不佳。当(例如)您要对齐尾随注释时,会出现此问题:

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

他们现在站着,所有的人都排好队了。用可变宽度的字体查看,但是,事情变得很丑陋。使用空格时,注释可能(通常会)稍微错位。但是,使用制表符时,对齐错误通常变得非常严重:

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

突然之间,我们的可变宽度字体中的“ i”和“ m”或“ x”之间的细微差别被放大到了整个制表位。

最重要的是,无论您看似多么琐碎,使用选项卡查看代码的方式几乎任何改变都可能并且通常会产生难以理解的混乱。

要回答您的其他问题:其他人已经指出了这一点,但是我无法想象编程编辑器中的任何人(或其他任何东西)实际上都使用空格键来插入空格,因此,有关“键入spacespacespacespace”的问题是无关紧要,因为无论如何也没有人这样做。与后退间距类似:很难想象编辑器需要按BkSpc四下才能转到上一个制表位,所以(再次)这个问题是无关紧要的。

底线:如果您(而且只有您)曾经看过代码,则使用制表符很好,并且仅使用单个编辑器就可以这样做,而您根本不需要重新配置(根本!)。但是,这些条件几乎是不可能的。强制只有一个合理的答案:绝对不要使用制表符。


1
我看到您说“比例字体会同时打乱空格和制表符,但它们会更糟地打乱制表符,因此请使用空格”。为什么不使用弹性制挡块?nickgravgaard.com/elastictabstops
阿马拉

@sparkleshy:这是一个不错的主意,但是对真实代码没有任何影响,并且直到所有(或至少绝大多数)真实编辑器都已经包含它之后才开始。
杰里·科芬

...我知道:'(-好吧,有点。您仍然可以使用由空格支持的编辑器(例如,如果使用空格,则应使用tab键),但假装它们是弹性制表符;它可以管理空格更容易。
阿马拉

2
如果您使用比例宽度的字体进行编程,那么,您不仅要担心制表符,还有很多其他问题……
Brian Knoblauch

1
@BrianKnoblauch:作为使用欧洲风骚字体的人,我必须不同意。唯一会引起我麻烦的是空格。当然,这也与我的缩进样式有关,缩进样式决不能在行与行之间使用多个制表符。假设我得到了弹性的制表符,我的代码将看起来更好。
Magus 2014年

2

最大的问题是“制表符”宽度的不一致,有时将它们呈现为四个空格,有时八个。在许多编辑器中,您可以将它们设置为1到9个空格。

因此,这将使一个简单的WYSWYG编辑器变成您所看到的就是别人可能会得到的东西。

对于Python来说,这是一个特殊的问题,但是在任何“花括号”语言中,这也是一个问题,因为缩进用于向人类读者传达含义,而混乱的制表符使代码难以阅读。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.