也许我一个人在里面,但是没有什么让我烦恼的,就像人们缩进而不是制表符。与打字SpaceSpaceSpaceSpace相比,打字更容易,更直观Tab吗?当然,制表符宽度是可变的,但它比空格更能表示缩进空间。退格是一样的。退格一到四次?
为什么像Python这样的语言建议在制表符上使用空格?
也许我一个人在里面,但是没有什么让我烦恼的,就像人们缩进而不是制表符。与打字SpaceSpaceSpaceSpace相比,打字更容易,更直观Tab吗?当然,制表符宽度是可变的,但它比空格更能表示缩进空间。退格是一样的。退格一到四次?
为什么像Python这样的语言建议在制表符上使用空格?
Answers:
一致性,主要是。
另外,偶尔会出现一些实际使用空白的东西-例如Python:告诉我,如果我运行以下代码片段会发生什么?
def foo():
print "a"
print "b"
答案:您将收到一个IndentationError,因为这两个打印语句的缩进程度不在同一级别,因此不属于同一代码块。(第一个使用制表符,第二个使用空格)
然后令人沮丧的情况是,一个开发人员的编辑器的选项卡设置为8个空格,另一个开发人员的选项卡设置为4个空格,而某人由于某种奇怪的原因使用了5个...在一个工作站上看起来很正常,但是当它签入时SVN和其他人进行了更新,他们会看到可怕的,混乱的混乱。
因此,无论是空格还是制表符,这都是始终保持一致的两个很好的理由。
但是,空格允许对缩进的控制比制表符更多,并且不需要在编辑器中进行任何特殊配置即可使其起作用。(尽管可以使它更容易-例如在vim中,set expandtab
只要您在按Tab时就插入空格)
编辑:有趣的是,该网站似乎已将我的标签页标准化为空格,以便浏览器可以正确显示它。单击“编辑”以查看原始的,包括的标签;)
这是关于Python中的缩进和空格的很好的讨论。从文章:
最好完全避免使用制表符,因为制表符的语义在计算机世界中不是很明确,并且可以在不同类型的系统和编辑器上完全不同地显示。此外,在复制和粘贴操作期间,或者在将一段源代码插入网页或其他类型的标记代码期间,制表符通常会被破坏或错误转换。
至于关于两次或多次按下空格键或退格键的争论,由于大多数源代码编辑器只需按一下Tab键即可插入可配置数量的空格,并且类似地不缩进,因此当使用空格进行缩进。
对我自己来说,我更喜欢空格,因为无论我在IDE,或less
,还是记事本中查看代码,代码总是以相同的缩进量显示。即空间更便于携带。
在Python中,缩进控制程序流,因此至关重要。
如果使用带制表符格式化的代码并进行复制,以使制表符更改或丢失,则代码的结构将被破坏。空间永远是空间=更安全。
如果您担心空格键的磨损,可以将编辑器设置为将制表符自动转换为空格。
.vimrc
能帮我
set softtabstop=4
,而TAB和BACKSPACE都将使用4个空格作为选项卡。(好吧,对于每个制表符,将宽度视为4个空格)
应该始终使用空格,因为单独的制表符不足以适应多种样式,并且混用制表符和空格(几乎)总是会产生绝对的混乱。
对于通常需要空格的一种样式的示例,请考虑以下内容:
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四下才能转到上一个制表位,所以(再次)这个问题是无关紧要的。
底线:如果您(而且只有您)曾经看过代码,则使用制表符很好,并且仅使用单个编辑器就可以这样做,而您根本不需要重新配置(根本!)。但是,这些条件几乎是不可能的。强制只有一个合理的答案:绝对不要使用制表符。
tab
。如果您无法在自己喜欢的编辑器中进行配置,则需要一个更好的编辑器。