当前位置:  开发笔记 > 开发工具 > 正文

代码格式化:排队类似的线路好吗?

如何解决《代码格式化:排队类似的线路好吗?》经验,为你挑选了6个好方法。

我最近发现我们公司有一套编码指南(隐藏在文档管理系统中,没有人能找到它).它通常看起来非常明智,并且远离通常的宗教战争,关于在哪里放置'{以及是否使用硬标签.但是,它确实表明"行不应包含嵌入的多个空格".这意味着不要做这种事情:

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 },
  // ...
}

对此的理由是,对一行的更改通常需要编辑每一行.这使得改变更加努力,并且更难理解差异.

我被撕裂了.一方面,像这样排列可以使重复代码更容易阅读.另一方面,它确实使差异难以阅读.

你对此有何看法?



1> VonC..:

由于我监督源代码的每日合并,...我只能建议反对它.

这很漂亮,但是如果你定期合并,"更容易阅读"的好处远远少于合并代码所涉及的工作量.

由于该格式无法以简单的方式自动化,因此第一个不遵循该格式的开发人员将触发非平凡的合并.

不要忘记在源代码合并中,不能要求diff工具忽略空格:
否则,""和""在diff期间看起来会相同,这意味着不需要合并...编译器(以及添加的编码器) String双引号之间的空格)不同意!


难道不是比这更糟糕吗?任何需要重新排队的编辑(实际上似乎更常见的是)会给你一个差异,整个代码块会发生变化.这意味着立即进行非平凡的合并.
这不是源控制系统中的失败,那么,如果他们不能忽略空间?

2> Eli Bendersk..:

我被撕裂了.一方面,像这样排列可以使重复代码更容易阅读.另一方面,它确实使差异难以阅读.

好吧,因为让代码可以理解比让差异理解更重要,所以你不应该被撕裂.

排除类似线条的恕我直言确实大大提高了可读性.此外,它允许使用允许垂直选择的编辑器更容易地进行剪切.



3> Derek Park..:

我从不这样做,我总是建议不要这样做.我不关心难以阅读的差异.我确实认为首先要做这件事需要时间,并且每当必须重新排列行时需要额外的时间.编辑具有这种格式风格的代码是令人愤怒的,因为它经常变成一个巨大的时间汇,并且我最终花费更多时间格式化而不是进行真正的更改.

我也对可读性益处提出质疑.此格式样式在文件中创建列.但是,我们不从上到下列样式.我们从左到右阅读.柱子分散了标准阅读风格,并将眼睛向下拉.如果它们并非完全对齐,那么这些列也会变得非常难看.这适用于无关的空白,但也适用于具有不同间距但在文件中一个接一个地落下的多个(可能不相关的)列组.

顺便说一句,我发现你的编码标准没有指定标签或支架位置真的很奇怪.混合使用不同的标签样式和大括号放置会比使用(或不使用)列式格式化更容易损害可读性.



4> Lucas Oman..:

我从来没有这样做过.正如您所说,有时需要修改每一行来调整间距.在某些情况下(如上面的条件),如果你消除了间距并将块放在与条件不同的行上,它将是完全可读的并且更容易维护.

此外,如果你在编辑器中有很好的语法高亮,那么这种间距不应该是必要的.



5> Onorio Caten..:

史蒂夫麦康奈尔在一本非常有用的Code Complete中对此进行了一些讨论.如果你没有这本开创性书籍的副本,请帮个忙买一个.无论如何,讨论是在第一版的第426和427页,这是我手上的版本.


编辑:

McConnell建议在一组赋值语句中对齐等号以表明它们是相关的.他还警告不要在一组任务中对齐所有等号,因为它可以在视觉上暗示没有任何关系.例如,这是合适的:

Employee.Name  = "Andrew Nelson"
Employee.Bdate = "1/1/56"
Employee.Rank  = "Senator"
CurrentEmployeeRecord = 0

For CurrentEmployeeRecord From LBound(EmployeeArray) To UBound(EmployeeArray) 
. . .

虽然这不会

Employee.Name         = "Andrew Nelson"
Employee.Bdate        = "1/1/56"
Employee.Rank         = "Senator"
CurrentEmployeeRecord = 0

For CurrentEmployeeRecord From LBound(EmployeeArray) To UBound(EmployeeArray) 
. . .

我相信差异很明显.还有一些关于对齐延续线的讨论.


McConnell在随后的*Code Complete*修订版中对此建议做了180分.他在第二次修订中的建议:*不要将任务陈述的右边对齐*.他承认这种对齐方式的可读性和可理解性略有提高,但这种风格带来的巨大维护成本并不能证明这种轻微的增加是合理的.

6> Rylee Corrad..:

就个人而言,我更喜欢更高的代码可读性,但代价是稍微难以阅读的差异.在我看来,从长远来看,代码可维护性的改进 - 特别是在开发人员来来往往 - 值得权衡.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有