代码格式化:对齐相似的行可以吗?

27

最近我发现我们公司有一套编码准则(藏在一个文件管理系统中,没有人能找到它)。它似乎是相当合理的,避免了关于'{''的放置以及是否使用硬制表符等通常的争论。然而,它建议“行不应包含多个空格”。这意味着不要做这样的事情:

foo    = 1;
foobar = 2;
bar    = 3;

或者这样:

if      ( test_one    ) return 1;
else if ( longer_test ) return 2;
else if ( shorter     ) return 3;
else                    return 4;

或者这个:

thing foo_table[] =
{
  { "aaaaa", 0 },
  { "aa",    1 },
  // ...
}

这样做的理由是更改一行通常需要编辑每一行。这使得更改变得更加费力,并且更难理解差异。

我犹豫不决。一方面,这样排列可以使重复的代码更易于阅读。另一方面,它确实使差异更难以阅读。

你对此有什么看法?


第一和第三个例子都很好,但我认为第二个可能需要将其分成多行。 - thomasrutter
14个回答

1

你可以设置你的差异工具忽略空格(GNU diff:-w)。 这样,你的差异将跳过那些行,只显示真正的更改。非常方便!


1
版本控制工具中使用的差异工具并不总是可行的。 这意味着这个差异工具知道字符串中的空格(它们不能被忽略)。我的旧Winmerge 2.6.14会认为(在该设置下)""和" "是相同的...但Java编译器会不同意 ;) - VonC

0

我们在多个合同的差异问题上遇到了类似的问题... 我们发现制表符对于每个人都是最好的选择。将您的编辑器设置为保留制表符,每个开发人员都可以选择自己的制表符长度。

例如:我喜欢使用2个空格的制表符编码非常紧凑,但默认值为4,因此尽管在我们各种屏幕上的缩进等方面看起来非常不同,但差异是相同的,并且不会在源代码控制方面引起问题。


我并不认为使用制表符对齐这种方式是可行的。至少,如果你希望代码在不同的制表符宽度下仍然对齐的话,那么这种方式就行不通了。 - Ned
哦,仔细检查后,我意识到我对指南不涉及制表符与空格的说法是错误的:它基本上表示永远不要使用硬制表符 :) - Ned

0

我喜欢第一个和最后一个,但不太喜欢中间的。


-2

这正是上帝赐予我们制表符的原因——在行中间添加一个字符不会破坏对齐。


1
另一方面,强烈建议使用空格而不是制表符。 - Eli Bendersky
就我个人而言,手动设置硬制表符缩进很难做到完美无误,我还没有遇到过总是能够正确排版的编辑器。然而,这是一个相当有争议的话题。 - Ned
制表符很好用,但是有1/8或2/8的机会(假设制表符大小为8),会扭曲列的排列(在这里考虑git diff,尽管可以创建一个自定义的diff命令,在通常生成diff之后作为后处理步骤智能地用空格替换制表符)。 - FooF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接