2008-11-12 73 views
21

几年前,当我开始一个小型开发项目时,其他开发人员和我坐下来商定一个妥协大括号和缩进样式。这不是任何人的最爱,但这是没有人真正讨厌的。我写了一个.indentrc配置文件到这个样式中,并且有一个签入触发器,它会在每个文件签入时对其进行缩进。这使得它不会影响你编写代码的风格,它会在别人看到它之前成为团体标准。这具有一致性的优点。但是我从来没有见过其他人在此之前或之后这样做过。强制编码风格

那么你怎么说呢?好主意,还是可憎?

+0

+1:好主意 - 下面列出的一些增强功能也可能是积极的补充。 – 2008-11-12 15:35:22

+1

现代的IDE使这种宗教的东西没有意义。两个按键和文件看起来像开发人员想要的方式。谁在乎它在源代码控制中的样子。当然,这使得发现编辑是一个痛苦的屁股。 – 2009-01-12 01:15:24

+1

@ RobertC.Barth:为什么不使用rsync作为您的VCS?有所有不错的功能:分散,ssh,压缩。天哪,谁需要差异,责备和三路合并? – 2011-12-16 13:48:04

回答

11

采用中性编码风格绝对是一个好主意。但是,只有在签入源代码时才强制执行编码风格可能不是一个好主意(另请参阅下面的Bill'sElie'的回答)。

使用check-钩:

临:但是允许他们希望程序员来写,这样他们就不会去想标准或改变他们编写代码的方式。这可以最大限度地降低对策略的抵制力,并且在编写代码时不会对其生产力产生负面影响。

Con:您的编码人员可能只是熟悉中性风格,所以您没有得到所有使用“相同”风格的人的全部好处。如果你的程序员必须在一对编程设置中一起工作,他们仍然会在屏幕上受到彼此的编程风格的影响,这将与他们自己的风格或中性风格不同。

往前一步,在开发过程中使用的中性风格:

临:鼓励在中性风格流畅,前后它已选中每个人都可以阅读其他人的代码

骗局:你会遇到更多的阻碍你的开发者这样做。根据你的文化,这可能比它的价值更麻烦。

4

这听起来像个好主意。只要你最终的风格不是什么奇怪的东西,这是确保你的开发者使用风格的好方法。而且它具有额外的好处,即他们不必以这种方式进行编码 - 当它们检查其变化时,它们将被重新格式化。如果有可用的工具,可以插入CVS(通用术语),那将是非常好的。

+0

“CVS(通用术语)” - > VCS/SCM? – hangy 2008-11-12 15:37:12

+0

代码版本系统,但没有任何特定的。 – Elie 2008-11-12 16:00:06

15

我会说好主意。我会更进一步,让每个人都在他们的IDE中使用配置文件,以便他们默认以默认的风格编写。如果他们必须以中性风格来看待其他人的代码,他们可能会习惯它。即使他们自己的代码在一次办理登机手续后应该处于中立风格,那么为什么要以他们自己的个人风格开发新代码呢?

7

如果您将其限制为对大括号和缩进执行样式,那么我认为这是个好主意。但是,如果您尝试执行每一种格式标准,那么它可能不会。在我看来,有时候打破标准是有道理的。举例来说,我更喜欢

int x = y * z; 

int x = y*z; 

,因为它更易于阅读。不过,我更喜欢大大

int a = b*c + d*e; 

int a = b * c + d * e; 

因为间距代表操作的顺序。

所以你的强制缩进和大括号的政策听起来很不错。但如果有人试图盲目执行其他间距规则,我认为它不会奏效。

+1

只要每个人都同意一个可接受的标准,我不明白为什么这不能包括括号和缩进。 – 2008-11-12 15:32:50

2

我们使用TFS和检查策略来运行一组Stylecop规则。如果你的代码没有通过,你不能检查它。确实工作得很好。除了始终如一的风格和良好的评论外,它似乎也提高了代码的总体质量 - 也许是因为开发人员被迫描述了每个方法,事件等是否被迫在检查之前更多地考虑代码英寸

只有一个MS解决方案,但它是值得的,如果它可用。

2

使用自动代码格式化程序的最大问题是代码格式化程序无法处理每种情况。

例如,如果您的代码中有很多SQL,则可能会自动格式化SQL。但是,如果你的SQL超过一行(多长时间是一条线,不管怎么样?),那么你必须格式化它。到目前为止,我还没有看到一个好的格式化程序,可以正确处理这个问题。

例如:当你有很长的查询

String sql = "SELECT * FROM USERS WHERE ID = ? AND NAME = ? AND IS_DELETED = 'N'"; 

VS

String sql = 
    "SELECT * " + 
    "FROM USERS " + 
    "WHERE ID = ? " + 
    " AND NAME = ? " + 
    " AND IS_DELETED = 'N'"; 

第二种格式更具有可读性。大多数格式化器会将其格式化为一行,直到行长为止。

然而,如果你正在做的是转向

if(x=1) print("blah"); else print("eep!"); 

if (x = 1) { 
    print("blah"); 
} else { 
    print("eep!"); 
} 

然后格式化就可以了。我们在工作上做了类似的事情;它不是由CVS工具强制执行,而是由IDE执行。工作得很好。

0

我相信你现在决定了你的开发环境。如果您使用Eclipse,则可以在Java编辑器上启用格式化源保存操作,该操作会在每次保存时重新格式化。这样做的主要好处是,源代码仓库在源代码仓库完成时标记源代码的机会,而不是源代码稍后重新格式化。

使其成为自动步骤。稍后你会很感激。

2

有一个叫EditorConfig的项目可以稍微解决一下这个问题。但是,它目前只能解决缩进问题。

EditorConfig包含many different editors的插件和文件格式标准。通过在项目的根目录下创建一个.editorconfig文件,并安装相应的插件,编辑器将在输入代码时对其进行格式化。

这是一个通用的方法(不像indentrc,不限于C/C++),但你仍然可以看看这个解决方案。