编码风格:如何提高公司的编码风格和标准

14

如何提高公司的编码风格标准?以C #为例。

我想不同开发人员之间存在许多差异需要考虑,具体因素可能包括教育、经验和过去使用的编程语言。

如何证明某种方式比其他方式更正确?

一个人可能会说:“我用我的四轮车移动到挣钱的地方”。那么为什么说“我开车上班”更“正确”呢?

有些人可能喜欢代码更加明确,有更多的代码行。有些人可能喜欢更紧凑的代码。

// Explicit
string text = defaultValue;
if (string.IsNullOrEmpty(text)) {
   text = fallbackValue;
}
// Tighter
string text = defaultValue ?? fallbackValue;

或者是旧的防护编程风格,其中您在开始时检查错误情况而不是将整个方法体包装在一个正向if语句内:

public string ChangeText(string text)
{
    if (!string.IsNullOrEmpty(text))
    {
        // Do a lot of stuff 
    }
    else {
        throw new Exception();
    }
}
// vs.
public string ChangeText(string text)
{
    if (string.IsNullOrEmpty(text)) {
        throw new Exception();
    }
    // Do a lot of stuff
}

在这里,旧有的“我阅读代码有困难”是否有效?这种情况与将泛型引入C#时相同,人们起初阅读时会遇到麻烦。

可读性差的代码和一些开发者不习惯的代码之间如何划分界限?

Phil Haacks的"新语言关键字悲伤的七个阶段"哪些部分在此具有有效观点?

公司是否有任何简单的方法来制定编码标准并在公司内执行?

更新:请考虑变量命名等无法在文档中明确定义的事项。或者可以吗?


应该是社区维基 - SilentGhost
更不用说几个问题的重复了。 - George Stocker
7个回答

6

公司设置编码规范的最简单方法:

创建一个标准文件并强制执行。

......人们喜欢抱怨代码质量,但很少有人会花时间创建一个标准文件。这值得努力,只要您能够执行它(代码审查等),那么您肯定会注意到代码方面的改进。


这只对客户有好处,假设他们真的读了它。代码检查器是更好的方法,可以根据设置使某人的代码通过或失败。请参见Vadim的答案。 - OMG Ponies
编码标准文档是开发团队内部使用的,每个开发人员都会阅读该文档以了解团队的编码标准。这与客户无关。除非客户要求,否则客户不应看到您团队的编码标准。 - Justin Niessner
@Justin:再次强调,这样做并不能阻止我提交不符合同一风格的代码——这会让你回到起点,也就是原帖提出的问题,即如何停止这种情况的发生。 - OMG Ponies
1
使用已发布的标准是一个更好的主意。这样可以节省时间,并且人们已经熟悉它们的机会更大。 - slikts
足够接近了...从答案中我可以看出我需要稍微修改一下问题。 - Seb Nilsson
@Justin:我认为你应该详细说明“强制执行”的含义。根据我的经验,强制执行代码风格的最佳方式是使用自动化工具。即使是代码审查人员也会忽略一些风格错误。该工具应该是每个工作副本的一部分,以便开发人员在提交代码之前检查其代码。它还应该用于拒绝提交。即使是最好的编码人员也会犯错。 - Harvey

5
你可以使用微软的免费工具,例如StyleCop
你可以禁用或修改你不喜欢的规则。

4
有两个主要的编码风格问题:
1. “我应该把开括号放在哪里?”这类问题通常不太重要,即没有真正的理由偏好一种风格而不是另一种。 2. 实际的编码规则,比如我们是否在函数中间使用 return。
对于第一类问题,我认为没有任何辩论的必要。只需在标准文件中设定一个标准,并强制执行它(稍后会详细介绍)。
至于第二个问题,我真的不确定它是否应该被规范化。我个人喜欢在函数中添加返回值以检查错误条件,我知道有些人对此感到不安。但归根结底,我们通常可以很好地阅读彼此的代码。这些问题更多地涉及你如何表达自己,什么更容易写,我不希望公司制定规则达到这个层面。
至于如何执行事情,标准文件是好的,但根据我的经验,它们往往不被认真阅读或遵循,很快就会被遗忘。最好的方法是拥有某种自动化工具,告诉你违反了标准。
例如,即使作为完全新的 Java 程序员,我也知道何时将我的标识符大写/小写,仅仅是因为 Eclipse 让我(安静地、不显眼地)知道了标准。

3

首先,你需要始终执行编码风格 - 永远不会有共识。


这就是为什么我会尝试自动化检查一致性。根据您的语言,您可以使用StyleCop(针对.Net)或类似于Linux下的缩进。

每个开发人员都可以在自己的环境中使用自己的代码风格(重新格式化可能非常容易,具体取决于您的环境),但是所有检入的代码都必须符合公司的风格。

你选择哪种风格?好吧,通常已经有了流行的风格 - 具体取决于语言。对于您的示例(C#),我会选择微软风格。最后:只有项目经理(高级程序员)才有权调整它。


是的 - 像 ReSharper 这样的工具可以使重新格式化源代码以匹配括号位置等约定变得非常容易。 - TrueWill

1

大多数公司使用编码风格指南/惯例。这些文档告诉您应始终在if主体周围使用大括号,即使只有一个命令,应使用制表符/空格进行缩进等。

有很多工具可用于(自动)检查和强制执行编码风格。(Java世界的一个示例是checkstyle,它可以集成到eclipse中,也可以在连续集成解决方案(如“hudson”)中使用。)


1
一个编程问题:如何证明某个方法比另外一种更好?
其实很简单:不用去证明。我们只需要选择一种代码风格,沟通它,并坚持使用。

2
容易,但可能会让你的员工感到厌恶而离职。这取决于你是否拥有他们的技术尊重(完全不同于你的资历和权威)。 - MarkJ

0

我认为这里的一致性很重要。除非当前的方法特别糟糕,否则没有必要进行关于哪种方式比另一种更好的语义辩论。

重要的是团队编写代码时保持一致,这样如果有人离职或发生意外,他/她的同事在被迫与代码一起工作时就能知道代码处于什么状态。


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