对于程序员来说,尾随空白就已经是一个问题,像Emacs这样的编辑器具有特殊功能来突出显示或自动删除它,并且许多编码标准都要求您消除它的所有实例。我不确定为什么。我可以想到一个避免不必要的空格的实际原因,那就是如果人们不小心避免使用空格,那么他们可能会在两次提交之间进行更改,然后由于某些人删除或删除了某些差异,所以我们发现它们之间存在差异。添加了一个空间。

这听起来像是避免它的一个很好的理由,但是我确实想看看它是否还有其他好处。那么,为什么尾随空格这么大呢?

评论

尾随空白确实是提交噪声。想不到其他任何原因。
一个好的diff工具应该能够忽略尾随空格(如果需要,也可以领先)。毕竟,Emacs可以做到,为什么不使用差异工具?

使用“结束”按钮导航到字符串的末尾可能会出现很多尾随空格的情况。

我认为您是用错误的方式问这个问题。另一种解决方法是:«尾随空白有什么优势? »。当问正确的问题时,答案变得很明显;)

也许您应该尝试在Whitespace中进行编程。 * 8')

#1 楼

对我来说很重要的原因:


当我按下“ End”键时,我希望光标移至行尾(取决于我使用的编辑器以及使用的方式它已配置),我希望能够立即开始输入。如果光标到达该位置,并且我必须删除3个或4个字符,这很烦人。尤其是在整个文件中不一致的情况下。
当我的字符串文字跨越多行时,尾随空格会使输出字符串在使用时看起来不正确。

虽然不严格编程,如果文件中有尾随/前导的内容将被解析并用作其他内容的输入,则空格可能会严重破坏数据输入。当干净的,生成的输入文件被在Excel中编辑的东西弄脏了,然后尾随空格(和其他格式问题)会蔓延时,这种情况最容易发生。

评论


要点1是您的编辑器的问题,而不是尾随空白。

– Marjan Venema
2011年11月24日在18:57

@MarjanVenema:是的,可以将编辑器设计为转到最后一个NON-whitespace,但是您永远不会知道尾随的whitespace(除非以其他方式指出,否则我也可能会发现END并不奇怪)不要去到行尾,这是我习惯的。多行字符串文字会出现问题。因此,编辑器将必须知道,在多行字符串文字中,END应该转到最后一个字符,包括空格。我使用的编辑器不是那么聪明。

–FrustratedWithFormsDesigner
11-11-24在19:01



如果不选择多余的空格,我很难用鼠标添加选择,这对于剪切粘贴可能很重要。否则在提交(最终冲突!)时一无所获。没什么大不了的,但是有很多烦恼。它给人的感觉是以前的开发人员很懒,希望您离开他/她的混乱状态。

–deadalnix
11年11月24日在19:20

@MarjanVenema>对不起,但是编码与您的喜好无关。您可能更喜欢这些东西,对您有好处。但是您并不孤单,其他开发人员必须与您合作。因此,必须考虑他们的喜好。

–deadalnix
11年11月24日在19:21

@deadalnix:当然,这就是为什么您需要一个优秀的编辑器,并提供适合大多数人的喜好的选项。因此,点1是编辑器的问题,而不是尾部的空白。

– Marjan Venema
11年11月24日在20:30

#2 楼

我真的很讨厌尾随空格,但是确切的原因有点含糊。

我想这种感觉的起源不是在编程中,而是在桌面出版领域。您是否有需要别人排版的文档需要排版成出版物?在所有现代出版物中,特别是在使用列的情况下,习惯上是使句子在一个段落中顺序地跟随彼此,而不是为每个句子开始新的一行。好吧,当有尾随空白时,要花更多的时间才能正确处理(大量搜索和替换操作以消除双倍空格等)。

其他原因(在编程中) ,我知道这不是很好的理由,但是他们以强烈的方式困扰着我的潜意识,以至于迫使我消除它:


它占用了比必要的更多的存储空间
编译时,解析器将无缘无故跳过多余的字符
当打开WordWrap并且
跟踪空间不适合时,某些编辑器可能会添加额外的空白行

是的,我知道!我知道,这些都是垃圾原因。我不是完美主义者,但是...也许我是吗?

我能想到的最后一个原因是光标移动不一致。感觉就像光标悬在行尾的稀薄空气中,向右迈出的每一步都可能导致其下降或悬停到未知的程度,只是感觉不稳定(就像Super马里奥曾经跳来跳去。)

我可能被诊断出患有Trailspacefobia?

评论


不是我的领域,但对我来说似乎很奇怪……您在桌面出版中使用哪种排版系统,默认情况下不会忽略尾随/多个空格?我认为LaTeX和大多数编程语言的使用方式在任何地方都是标准的,除了在消费者级别所见即所得的垃圾中。

–leftaround关于
2012-2-28在18:23

Adobe InDesign(是否也属于消费者级别的所见即所得垃圾?)。它将忽略尾随空格,是的,但是将所有换行符替换为段落中的空格,您最终将得到双倍空格(不被忽略),然后需要额外的替换来消除这些空格。

–路易斯·萨默斯(Louis Somers)
2012年2月29日14:23在

“台式机发布”与“排版系统”无关。

– rakslice
13年11月26日23:06



“潜意识”是有点多余的。有点像尾随空白。

– Guildstern
20年8月18日在14:12

#3 楼

这些答案中的许多几乎都涉及到它对我不利的原因,但基本上是:它“破坏”了文本编辑器。我的经验是在vim上。

Vim的设计使普通操作可以清晰地映射到字母,您甚至不必考虑要敲什么字母或组合键。各种热键使光标能够快速地在文本周围跳转,从而只需几次击键即可将其移动到所需的位置。甚至像折叠代码块之类的事情也很快,因为您可以按END或$跳到该行的末尾,光标应与{或}或(或)之类的东西重叠-无需中断您的思维流程即可在屏幕上显示一个想法。

但是随后出现一些尾随空白,并且光标的移动不再可预测。您的键入过程被打断了,因为看不见的东西在影响光标的移动位置,因此您必须打破思路将其发送到应该到达的位置。当他们真正专注于某项任务并且有人打扰他们时得到?是的,在最不期望的时候找到尾随空格就是这样。

作为旁注,我还注意到,不关心尾随空格的人是使用鼠标进行导航的人,并因此而趋于慢速打字员...

评论


附带说明,键入速度与是否使用鼠标进行导航无关。某些导航非常适合鼠标。 ; p

–史蒂文·杰里斯(Steven Jeuris)
2011年11月26日,下午3:26

如果使用vim,则可以快速删除所有结尾的空格:%s / * $ //

–乔治
14年5月16日在21:52

我知道@Giorgio,但我不能随便做,因为它算作版本控制的变更

–伊兹卡塔
2014年5月16日在22:49

@izkata:是的。我将重新格式化文件,然后在检入之前必须先对其进行更改,但是如果其他开发人员继续使用尾部空白来检入文件,这将是一场失败的战斗。

–乔治
2014年5月17日在9:13

这就是我的感觉-在ViM中使用}和{时,光标跳到了空行,因为其中有一些看不见的空格,这确实让您很烦。此外,尾随空格没有任何作用,并在提交中添加不必要的差异。 git diff将它们标记为红色是有原因的。但是您的主要观点可以扩展:编写不必要的尾随空格的人通常在其他两个方面草率地行事-从我的经验来看,它很好地指示了源代码不良以及格式不一致的代码。

– hochl
20年8月7日在15:21



#4 楼

令人惊讶的是,最明显的答案丢失了:尾部空格可能并且将产生难以发现的错误。

最明显的情况是多行字符串。 Python,JavaScript和Bash是受以下语言影响的几种语言示例:

print("Hello\·
····World")


产生:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal


如果未将编辑器配置为不显示空格字符,这在某种程度上是难以理解的,难以解决。

虽然语法高亮可以帮助避免此类情况,但更容易解决的问题是首先不要在行尾留空格。这就是为什么某些样式检查器在遇到尾部空白时会发出警告,而某些编辑器会自动对其进行修剪的原因。

在前面的答案中简要提到的另一个上下文是数据存储在文件中。

对于例如,包含尾随空格的CSV文件可能会导致数据不一致,这也很难检测到:符合标准的解析器将对空格进行修剪(标准表示前导或尾随空格无关紧要,除非用双引号引起来),但是有些解析器可能会行为不当,并将空格保留为值的一部分。

其他自定义格式可能会特别考虑到空格是值的一部分,从而导致一致但仍然难以调试的情况。

#5 楼

我最近花了一天的时间寻找一个错误,该错误竟然是数据中意外出现的空白。

评论


我认为这是一个错误;人为产生的输入的代码处理应丢弃尾随空格,并且通常也应丢弃前导空格。

–kevin cline
2011年11月24日19:25

@kevincline-至少应该如此。如果它在屏幕或打印输出上不可见,我不想考虑它。

–浏览
2011年11月24日23:51

因为您花了一天的时间寻找错误,所以尾随空格很大吗?请修改您的答案,以使其更具笼统性。添加一些背景,论据,...我个人从未遇到过空白问题,但我不以此为结论,它们也不是问题。

–史蒂文·杰里斯(Steven Jeuris)
2011-11-25 12:26



@Steven Trailing空格导致了一个难以跟踪的错误。似乎对我来说是一个很好的答案。您可以想象在这种情况下某些数据解析代码可能会中断。

–威尔·谢泼德(Will Sheppard)
2014年11月20日10:24



我在数据末尾删除了空格,现在测试失败。您对此负责。你叫什么名字?我应该把帐单寄到哪里?

–托马斯·韦勒(Thomas Weller)
17年9月26日在7:10

#6 楼

当我选择程序源代码以复制并粘贴(或删除它)时,发现在行尾看到所有不规则的多余空白会有些烦人:因为我必须在选择代码时阅读代码,结尾的空白是不必要的噪音。示例(点代表空白):

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..


这个示例是人为的,但是我看到了很多看起来像这样的代码。

#7 楼

除了明显的问题,它在某些情况下会中断解析?正如另一位发帖人所指出的那样,它可能导致微妙且难以追踪的错误。空格并不总是无关紧要的。在某些情况下,尾随空格会显着改变一行代码或数据的含义。

在大多数情况下,空格用于为人类读者格式化代码。尾随空格可能表示几件事情,包括:


不完整的语句;
缺少注释;
编辑有误;或
草率编辑。

其中两个可能导致错误的功能,而另一个可能会使理解代码更加困难。

#8 楼

有些编程语言对终端空白很敏感。例如,如果一行的末尾有空格,则TCL脚本将给出错误。