drupal.org中托管的代码的编码标准建议使用两个空格来缩进代码。其他网站建议使用制表符对代码进行缩进。

在每种情况下以及在每种情况下,正确的缩进字符是什么?请说明您给出的答案。

评论

请先阅读

IDE默认的FTW-只需按Tab键,看看会发生什么

无论您选择什么,都必须由整个团队使用,但当一个用户使用制表符时要使用其他空格。

我试图对其进行编辑以更正制表符/空格是缩进代码的唯一方法的含意。编辑已删除,但希望此注释会保留:为什么不使用缩进字符,而不使用左边界? -这可以由编辑器完全自动化,而文字处理程序已经做到了数十年。

我真的不认为这里应该有一个“可接受的”答案。选票较少的答案实际上是事实,这证明了这一点:为什么问询者仅因为提出了问题,就应该获得特殊的权力(即能够将自己喜欢的答案放在第一位)?

#1 楼

空格

选项卡可以是不同数量的列,具体取决于您的环境,但是空格始终是一列。

就构成缩进的空格(或制表符)而言,在整个代码中保持一致比使用任何特定的制表符停止值更为重要。

评论


您的第二段是错误的;答案是4!

–丹妮丝
2010-09-24 19:27

@Daenyth-也许如果您使用花括号语言。大多数Pascal / Delphi使用2。

–格里
2010-09-27在1:15

当可以动态设置TAB并指示单个缩进级别时,为什么要强制您使用2到4个缩进空间?

–JéQueue
2010-12-10 16:49

@MGOwen现在,使用css / javascript上的源代码最小化和HTML上的空格删除功能,可以轻松解决网站编码的下载时间参数。看到mod_pagespeed明白我的意思。

–伊文·普莱斯
2011年1月19日,11:12

“根据您的环境,一个选项卡的列数可以不同”是的,这正是优点。每个人都可以按照自己的喜好设置它并感到高兴。

– Andrea
2011年4月20日在9:23

#2 楼

选项卡

现在,当然,一致性比任何一个都重要,而且良好的IDE可以使差异微不足道。也就是说,该线程的目的是进行一场神圣的战争,因此:

我更喜欢制表符:


它们是专门用于缩进的字符
它们允许具有不同缩进大小首选项的开发人员在不更改代码的情况下更改代码外观(数据和表示形式相得益彰!)
用制表符对某些内容进行半缩进是不可能的。因此,当您从某个使用3个空格的网站的代码复制到4个空格的缩进文件中时,就不必处理对齐问题。


评论


将那3个空格的缩进代码复制到制表符缩进的文件中,该制表符设置为3个空格,该怎么办?当您将代码发送给同胞时,他们想知道为什么该函数的缩进率如此之差!

–Wayne Werner
2010年9月1日于20:16

制表符本来不是用于缩进的,它们是用于制表的,并且在其中做着可怕的工作...

– Timwi
2010年9月2日19:15

@Timwi:维基百科似乎说它们是用来将光标移到一组固定列的下一个。听起来列表不是主要功能。另外,我指的是后打字机时代。

– Fishtoaster
2010-09-2 19:31



加上许多程序员花费大量时间来编写html,css等,实际上,具有4个空格而不是制表符的文件的大小实际上是5-15%,这实际上是很重要的。示例:由于SE团队使用空格,因此您当前位于的页面的加载速度比应加载的速度至少慢10%。检查自己。

– MGOwen
2010-12-14在1:46



这种方法的另一个好处-使用箭头键进行左右导航时,按键次数更少。

–妮可
2011年5月18日在17:20



#3 楼

使用制表符可以缩进行的开头,每个缩进级别可以制表符一个,并让每个人选择他们想要的宽度。

如果要在一行中排列字符,请使用空格,因此他们总是排着队而不论制表符的大小如何。

并寻找并解决所有早期让这些愚蠢的事情成为问题的软件作者。(严重的是,为什么还要讨论这个问题?接下来,您将告诉我您也想使用多个字符作为换行符!)

评论


是是是是是是。百分之一百是。这样一来,每个人都可以在保留表格格式的同时设置自己的标签宽度。如果您担心要保留在80列之内(这可能是您应该做的!),则只需选择一个任意的最大预期制表符大小(例如4),并将制表符的边距保持在该宽度即可。老实说,这难吗?

–琼·普迪(Jon Purdy)
2010-09-24 20:23

是的,但不要在一行中使用空格对齐。您的同事可能正在使用比例字体,因此您的ASCII艺术作品在屏幕上看起来会很奇怪。

–paperjam
2012年12月2日于13:45

#4 楼

制表符




允许错误更加明显,对空格进行微管理很烦人。

一致,它们仅用于缩进,除非您发表错误的评论。

是可自定义的,您可以在编辑器的选项中指定它们的宽度。

效率更高,为什么在可以的情况下键入4个空格点击1个标签。
占用的空间小于多个空格。
占用的空间大于一个空格。

占用的时间更少。
希望在IDE。

应在制表符完全没用的地方使用空格。

即使用于对齐参数和注释,制表符仍然可以更好地工作。



评论


wrt“生产力更高”,我个人点击了TAB,让IDE进行转换以引入适当数量的空格字符。也许您需要升级:p?

– Matthieu M.
2010-12-14 19:14

-1:更明显的错误:不正确;一致:几乎不是因为可定制:是的,但同时也有缺点;生产力更高:并非如此,几乎所有想法都可以将制表符转换为空格;较小的尺寸:是的,但是实用吗?没有;更少的时间:没有合理的IDE;往往会工作得更好:如果您使用多个环境和工具,则根本不行

–MaR
2011年11月8日13:30

@MaR:明显的错误是正确的,选项卡的宽度更大。还有... Python!制表符是一致的,因为单个制表符是一个缩进,否则必须定义一个缩进将使用多少空格。定制是一个优势。您首先使用的是标签页,因此效率更高。似乎您甚至无法给出充分的理由说明为什么它不切实际,讨厌的人会讨厌...;)

–塔玛拉·维斯曼(Tamara Wijsman)
11年11月11日在11:51

@TomWij:制表符比等效的空格数大吗? Python实际上是唯一一种可以正确使用空格安全地使用制表符的语言(但是,与“插入空格”相比,它几乎没有优势)。也可以尝试其他语言,旧版环境,差异/合并,终端,sccs,以查看选项卡为何仍是理想的“理想”。

–MaR
2011年11月11日12:37

@MaR:我在哪里注明“等值空格”?我已经尝试了所有这些选项卡,它们在其中完美地工作!

–塔玛拉·维斯曼(Tamara Wijsman)
2011年11月11日下午13:07

#5 楼

制表符的所有参数在理论上都是很好的。但是...


理论上,实践和理论是相同的。实际上,它们不是。


是的,使用标签可以确定缩进级别。是的,您可以结合使用制表符和空格来对齐内容。在理想的世界中,它会

现实中,您看不到空格和制表符之间的区别,它们在移动代码并在另一个程序中查看代码时似乎总是混淆不清将标签页设置为8列是很麻烦的。

我以前使用标签页。然后,我开始作为团队的一部分工作并共享代码。我很快成为空间的拥护者。因此,虽然我可以同情标签的乌托邦,但我无法想象不使用空格。

评论


您可以找到像Kate这样的编辑器,该编辑器以“ ghost”字符显示标签-在编码时,我可以轻松看到标签与空格。

–HorusKol
2011年5月4日下午6:22

每个编辑器现在都有一个“显示空白”选项,而Visual Studio则有一个“ tabify”选项

–克里斯S
2011年6月17日9:31

好理由。这就是我放弃试图说服人们标签更加合乎逻辑的原因。即使是应该习惯抽象思维的程序员也似乎混淆了制表符和空格(“如果看起来像四个空格,那么它一定是四个空格!”)。对我而言,棺材里的钉子是似乎无法将Emacs配置为仅使用制表符缩进。

– Martin Vilcans
2011年6月22日21:10

+1制表符的乌托邦很棒,但是每次我在具有不同制表符宽度的编辑器之间移动代码时,代码都会被弄乱和对齐。用制表符默默地做错事太容易了。

– Mankarse
11年8月8日在8:27

我也曾经使用过选项卡,但是我遇到了一些IDE的麻烦,这些IDE不能为续行插入空格,我讨厌用空格替换所有这些自动插入的选项卡(Visual Studio是其中之一)。所以我只是坚持使用空格。加号空格使您可以将缩进大小的缩进用于诸如public:之类的东西:在C ++类声明中,这样它们看起来更漂亮(尤其是在嵌套类中)。

– szx
13年7月19日在21:02

#6 楼

可能感兴趣的一些相关意见:


圭多说空格
乔尔说空格
阿特伍德说空格
扎温斯基说空格,有点
/>

评论


仅仅因为你出名就不能使你正确。

–JéQueue
2010-12-10 16:52

@Xepoch:您是否已阅读其基本原理:)?

– Matthieu M.
2010-12-14 19:12

@Matthieu M.,是的,我已经读过,但仍然不同意。我也不喜欢橄榄,但也不会因为别人喜欢而使我错。我发现人们不使用标签来缩进是很可笑的,但这就是为什么他们称它们为CS圣战...

–JéQueue
2010-12-14 22:56

@Xepoch:是的,我想每个人都有自己的见解:)我确实认为,Guido指出了主要问题:制表符和空格的混合是有害的,因为它们对用户来说都是空白。

– Matthieu M.
2010-12-15 8:06

@Fishtoaster:当您说Joel用空格表示时,链接不应该链接到Joel的实际报价吗?该链接仅转到JoelOnSoftware论坛,一些ppl(很可能不是代表Joel发言)讨论制表符与空格。

–安德烈亚斯·马格努森(Andreas Magnusson)
2012年3月7日,11:25

#7 楼

胜利的标签。

#8 楼

I.绝对。讨厌。 4.空格。

为什么?主要是因为我厌倦了使用键盘浏览代码并不得不不断地敲击以缩进一个缩进的问题。这是从早期版本的Notepad ++甚至普通的Windows记事本中诞生的,这些记事本中没有诸如格式按钮之类的东西。当人们在其他地方都使用4时人们只使用3时,我遇到了很多问题。

另一个原因是制表符专门用于缩进,后来才被用于导航。当简单的left可以工作时,为什么要做left left left space?当一个简单的选项卡和首选项可以工作时,为什么IDE必须正确处理2-5个间隔的代码和格式?

不幸的是我是少数。

评论


您在浏览键盘代码方面效率低下。您应该使用CTRL + LEFT和CTRL + RIGHT来跳过空白和标记。因此,缩进无关紧要。

–Wizard79
2010-09-1 22:52



这种误解来自“专门为缩进设计的选项卡”?制表符之所以称为制表符(制表符),是因为制表符是为了制表而不是缩进而创建的,它们在两者上都做得很糟糕。

– Timwi
2010-09-2 19:17



@Lorenzo:您的键盘代码浏览效率很低。您应该使用w和b(或e和ge)跳过空白和标记:P

– R. Martinho Fernandes
2010-09-15的3:45



为了恶魔般的拥护:不要对您认为劣等的编辑器施加格式错误的代码。使用标签。

–琼·普迪(Jon Purdy)
2010-09-24在20:29

@Timwi:抱歉,坏死了,但是计算机制表键并不是为制表而发明的。该键的TYPEWRITER版本是,但是在键盘演变为与计算机一起使用的时候,使用tab键进行的缩进已超过了制表法,并且“ tab”一词已成为缩进的同义词。 COMPUTERS的标签应缩进,并且只有按照惯例,键的名称才能与打字机的名称匹配。您的论点类似于声称计算机返回键旨在开始新行并将光标移至最左端,因为这就是打字机中的目的:)

– Beofett
2011年4月12日在16:17

#9 楼

我个人喜欢在所有内容中使用制表符,因为每个开发人员都可以控制每个制表符的缩进量。这样一来,您就可以灵活地进行显示。

话虽如此,我通常会模仿文件中的任何编码风格(因为我花了大量时间进行维护工作)。

评论


一旦开始缩进除语句嵌套以外的任何内容,该操作就会中断。例如,如果要在同一列上对齐函数参数,则每行一个。通过混合制表符和空格是可能的,但是非常乏味。

– Finnw
2010年9月3日于7:36

这一点都不乏味,因为这意味着您可以在其中的大多数地方使用制表符,然后仅使用几个空格,而不必键入数十个空格即可到达正确的列。

–乔丹·瑞特(Jordan Reiter)
2011-12-12 19:55

@finnw,您假设每个人都在使用等宽字体-2012年,大量开发人员使用比例字体。如果第一个参数的左边有非空格字符,则无法保证后续行上的参数对所有人都适用。

–paperjam
2012年12月2日于13:53

您从未尝试编写HAML,对吧。

–alt
2012-12-14 9:41

我讨厌这样说,但是我无法想象使用可变宽度字体进行编程。它的绝对错误使括号标准,制表符与空格,所有内容……相形见...。 (当您收到带有行号和列号的错误消息时会发生什么?)

–午餐
13年2月21日在4:21

#10 楼

我认为没有缩进的感觉(至少没有小小的战争)。

我个人喜欢四个空格。它们使我能够更快地阅读代码,并且在每个编辑器(甚至是Vi)中都一样。

评论


vi(或更确切地说,vim)是使用选项卡的更好的编辑器之一,除了能够设置选项卡的宽度并自动扩展到空格(就像大多数编辑器一样)之外,您还具有softtabstop选项以及retab和retab!命令。

– Finnw
2010年9月3日于7:32

如果我们只说四个地方,到处都是,总是别无选择,然后继续前进,婴儿真的会死吗?

– MGOwen
10-12-7'1:34

四个空间到处看起来都不一样。现在,越来越多的程序员在其IDE中选择比例字体,以获得更愉快,更高效的编码体验。在这种情况下,四个空格看起来像是一个很小的缩进。

–paperjam
2012年12月2日于13:50

#11 楼

空格,因为当您在代码,函数参数列表,复杂的多行表达式或此类性质的右边对齐注释时,您希望您的漂亮作品适合所有人。如果您使用制表符并允许人们以不同的方式设置制表符,那么它们将打破除了最简单的代码缩进以外的所有对齐方式。

显然,世界上每个人都应该使用vim,即使在空格缩进的文件中,缩进,取消缩进和浏览“制表位”也很简单。

评论


这是许多编辑人员真正的好功能-能够快速遍历多个土墩和多个土墩。

–克里斯蒂安·曼(Christian Mann)
2010年11月6日在8:05

听起来您是在绘制ASCII艺术而不是编码。

–rmac
10 Nov 6 '17:21

我要补充一点:制表符不可用于对齐。如果您是制表符用户并想要对齐,则必须首先键入正确数量的制表符用于缩进,然后键入正确数量的空格用于对齐。只有这样,您才能看到所有用户和编辑者之间使用标签格式的代码。

–MaR
2011-11-15 15:30

#12 楼

制表符是自然的和正统的选择,因为按定义它们是用于缩进的。

不幸的是,制表符的实现不均匀,所以唯一的现实解决方案是4个空格。

评论


由于制表符(制表符)何时“按定义”用于缩进?根据他们的定义,他们是为制表而发明的(尽管他们在这方面也做得很糟糕)。

– Timwi
2010年9月2日于19:20

从技术上讲,发明了回车键可以将打字机头移到生产线的前部,而移动到下一行是通过旋转滚轴进行的。之后,返回键也将自动使滚筒前进。您不会看到人们全都挂在回车键上。 Tab键显然已添加到计算机以执行缩进。这是制表位的数字模拟,这是我在旧的非电动打字机上安装的。可以设置制表位,将滚轮移动到您选择的任何位置,几乎与制表键当前在压痕中的作用相同。

–乔丹·瑞特(Jordan Reiter)
2011年12月12日20:00

@JordanReiter RE:“虽然您看不到人们全都挂在回车键上。”:您从未遇到过CR(代表将打字机机头移到生产线的前端)/ LF(代表旋转滚轮)到下一行)的问题?

– Max Nanasy
2012年8月25日7:06



是的,但这确实是操作系统问题,而不是键盘问题。无论您使用的是哪种计算机,都希望按Enter键或Return键将您带到下一个链接。您无需使用一个键来发行换行符,也无需使用键来返回回车符。

–乔丹·瑞特(Jordan Reiter)
2012年8月27日15:07

#13 楼

显然,您需要一种组合方法。

如果要与其他开发人员共享代码,则需要进行标准化,并且由于这是不可能的(koff koff),因此需要使每个人都做四个空格。 />
然后,您需要一个足够聪明的编辑器,不要对此感到愚蠢,要知道它应该像缩进一样对待前面带有四个空格的行。任何现代IDE或程序员的编辑器都可以使用空格而不是制表符来自动处理代码。

#14 楼

为什么某人不能实现此功能:


代码以紧凑的格式存储,对相关系统有利。
每个开发人员打开代码时,代码的格式都与他们完全一样想要它
完成后,回到紧凑格式

每个人都很高兴,因为他们都看到了自己的“自己的”格式



评论


因为我没有足够的空闲时间来修复人们使用的所有现有编辑器和IDE,而且即使我这样做,也很难说服每个人升级。

– Peter Boughton
2010年9月9日在18:07

我确信他们可以将其内置到SVN中,或者找到其他方法将最终工具排除在其中。

–道地蒜
2010年9月9日在18:15

听起来有点像标签。每个开发人员打开文件并获得他们想要的缩进宽度。

–rmac
2010年11月6日17:35

您已经可以设置RCS或CVS以使用缩进程序。

–JéQueue
2010-12-10 16:56

谨慎使用缩进来强制缩进/代码以实现标准化,以免出现有趣的空格提示的开发人员因所有格式更改而受到指责/添加注释

–蒂姆·威利斯克罗夫特(Tim Williscroft)
2010-12-14 2:56

#15 楼

空格或制表符-Atwood真正说的是选择一件事并在您的项目中保持一致。代码格式化的唯一圣杯是确保其一致性,以使在您之后维护代码的精神病患者不会被迫永久纠正这种情况。

也就是说,如果您使用Python或其他任何将空格作为实际编程结构的语言都无法使用制表符。

评论


我使用标签。我不知道您是否完成了任何Python编程,但是相对缩进才是重要的。如果第1行是x的缩进,而第2行是x +1的缩进,则它被认为是更多的缩进。缩进可以是双倍空格,4个空格,制表符,只要您保持一致即可。

– Macha
2010-09-08 22:07

@Macha-感谢您的反馈。我从未从事过Python开发工作,但是我所有的人都告诉我他们使用空格,因此结识使用Tab的人很有趣。

–诺亚·古德里奇(Noah Goodrich)
2010年9月9日下午14:26

我在工作时使用python选项卡。它是可怕的。

–rhettg
2010-09-12 15:55

#16 楼

我是一个4位数的家伙,制表符不一致。

评论


它们如何“不一致”?它们始终是代表单个缩进级别的单个字符。这就是一致的缩进方案的确切定义。 (而且您可以亲自而不影响其他任何人,从视觉上看出您选择的任何方式都是一个加号。)

–轨道轻赛
2012年3月2日14:30



#17 楼

显然,制表符在Delphi中弄乱了东西,所以我不在Delphi中使用制表符。

但是我使用Emacs进行其他所有操作,并始终使用制表符,因为我的制表符正好位于我希望它们移到的位置。

评论


你能提供一个例子吗?我真的很好奇,因为我已经使用Delphi 15年了,从未见过。

–GrandmasterB
2010-09-24 19:32

edn.embarcadero.com/article/10280#4.3这只是样式指南,但是由于选项卡,我们有些无法解释的奇怪错误。也可能是由于Visual Source Safe。我无法解释,这只是我们公司绝杀的一部分。

–彼得·特纳(Peter Turner)
2010-09-24在20:04

问题是(至少)某些版本的Delphi的安装默认设置与通常的Delphi惯用语不匹配。因此,您最终得到了同时具有两者的代码。

–格里
2010-09-27的1:24

#18 楼

答案是,在每种情况下都不可能有单个适当的缩进字符。在团队中使用不同的样式时,使用字符进行格式化是不灵活的,并且可能导致冲突。

使用不同的格式化样式完美,灵活地格式化代码的唯一方法是虚拟地进行格式化,也就是说,无需任何操作。缩进字符。我知道唯一支持此功能的代码编辑器是以下示例中使用的代码:

为了演示虚拟格式,下面的屏幕截图来自使用此缩进方法的XSLT编辑器*(还有一个短片)。出于说明目的,XSLT中的每个字符都以黄色突出显示,以使内容中唯一的制表符或空格字符清晰可见。代码缩进由编辑器的渲染系统调整左边界(具有白色背景)来处理。



唯一的前导空格字符在Books行之前,因为这是文字文本内容,而不是代码,必须保留这些空格字符。

使用虚拟格式设置时,您可以选择缩进宽度以适合环境和缩进样式,而不会影响源文件中的任何字符。如果需要如下所示的扁平化视图,甚至可以将缩进宽度设置为0:



将其与空格字符格式进行对比,相同在没有虚拟格式的编辑器中打开的XSLT由该编辑器的自动格式化程序转换为:



上面屏幕截图中较大的空白黄色块清楚地显示了空格字符由常规编辑器的格式化程序添加。不幸的是,这些内容现在无法与真实内容区分开,因此必须修改XSLT才能更正此问题。

摘要

XSLT可能是一个极端的情况,但是此原理对于许多编程语言都适用:字符应用于内容,格式化时应寻求替代方法。

**披露:XSLT编辑器具有虚拟格式是由我自己的公司开发的*

评论


可悲的是,您可能要提前50年。坦率地说,程序是字符序列是一种荒谬的想法,在大多数程序员的脑海中仍然根深蒂固。

–汤姆·安德森(Tom Anderson)
2012年2月28日在20:48

#19 楼

到目前为止尚未提到:缩进很重要的语言(Python,Haskell)。但是1个字符会算作1个字符,无论是空格还是制表符,因此如果使用制表符,编译器看到的缩进可能与屏幕上显示的缩进不同。

因此,在像Haskell这样的语言中,空格是必须的。
在Makefile中,必须使用TABS。
在其他所有方面,这都是个人喜好的问题,如今已不再是很大-每个体面的编辑器都有一个“(将空格前导至空格”)和“(将空格前导至空格)”命令。

#20 楼

我曾经使用空格,但是最近我一直在使用制表符,纯粹是因为这是我最终注意到时设置的Eclipse。我们团队中的所有其他开发人员都使用Eclipse,因此当我们意识到我们已经使用它们很久了并且没有理由去更改空间时,对选项卡进行标准化是有意义的。

在IDE中将显示的选项卡大小设置为3或5个字符,这让我感到惊讶。

将显示的制表符大小设置为3或5个字符可极大地简化区分空格的代码段(这些天几乎总是4天)以及使用tab缩进的天。

#21 楼

已经给出了大量的论据,但是没有人提到我们未来的发展方向。

制表符或空格!

理想情况下,代码应被视为数据,而不是以任何特定的文本格式存储。任何开发人员都可以应用自己的首选视图。此外,这种视图不仅限于文本,还可以包括表格,颜色选择器和数学公式。

这个想法并不是太牵强。正是JetBrain的面向语言的编程编辑器元编程系统(MPS)使我意识到这解决了整个讨论,同时增加了许多额外的可能性。 (是的,使用编辑器插件是可能的,但是与MPS所采用的方法相反,直接处理文本会增加很多不必要的复杂性。)

与制表符和空格相比,几乎没有什么缺点可以因直接在抽象语法树上工作而被提及。为了使该技术成熟到商业上可行的产品,需要的只是这些。这种现象的最初迹象正在显现。

我主要希望看到其中一个大公司跳上这项技术的概念,然后看看会发生什么!

#22 楼

都不是更好,也不是更坏。唯一重要的是要保持一致。

如果您是一个团队,请选择自己喜欢的任何东西。请考虑您最喜欢的编辑器的默认行为,但是请选择您喜欢的任何内容。

如果您在团队中,请执行团队的工作。

在我的各种工作中,我使用了两个空格,四个空格,八个空格,制表符,空格和制表符,我想我可能也使用了一个空格。我告诉编辑器该怎么做,然后我再也没有考虑它,编辑器会确定细节。

唯一要做的就是确保您选择了一个聪明的编辑器。 Emacs还是VI?现在这是一场圣战,我愿意打仗:-)