Coding style 编码风格:如何改进公司的编码风格和标准

Coding style 编码风格:如何改进公司的编码风格和标准,coding-style,Coding Style,提高公司编码风格标准的最佳方法是什么?让我们以C#为例 我想开发者之间有很多需要考虑的差异。具体的可能是教育、经验和过去的编程语言 一个人如何证明某件事比另一件事正确? 一个人可能会说:“我把我的身体移动到我用四轮车挣钱的地方。”。那么,为什么说“我开车上班”更“正确” 有些人可能喜欢代码更明确,代码行数更多。有些人可能喜欢更紧凑的代码 // Explicit string text = defaultValue; if (string.IsNullOrEmpty(text)) { tex

提高公司编码风格标准的最佳方法是什么?让我们以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的哪一部分在这里有正确的观点

有没有简单的方法来设定编码标准并在公司中加以维护?


更新:考虑诸如变量命名之类的内容,这些内容实际上无法在文档中定义。或者可以吗?

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


重要的是,团队要始终如一地编写代码,这样,如果有人辞职或被公交车撞倒,那么他/她的同事在被迫使用代码时就会知道代码发生了什么。

在公司设置编码标准的最简单方法是:

创建标准文档并强制执行


…人们喜欢抱怨代码质量,但很少有人会坐下来花时间创建标准文档。这是值得付出的努力,只要你能强制执行(代码审查等),那么你一定会注意到你的代码有了改进。

你总是可以使用免费的工具,比如微软的


您可以禁用或修改您不喜欢的规则

大多数公司使用编码风格的准则/约定。这些文档告诉您,即使对于一个命令,也应该始终在if体周围使用大括号,应该使用制表符/空格缩进,等等


有很多工具可以(自动)检查和执行编码样式。(java世界的一个例子是checkstyle,它可以集成到eclipse中,也可以集成到像“hudson”这样的持续集成解决方案中。)

首先,您必须始终强制执行编码样式-永远不会得到同意。
这就是为什么我会尝试自动化一致性检查。根据您的语言,您可以在linux下使用StyleCop(用于.Net)或类似indent的东西

每个开发人员都可以在自己的环境中使用自己的代码样式(根据您的环境,重新格式化可能非常容易),但所有签入的代码都必须采用公司的样式

你选择哪种款式?嗯,根据语言的不同,通常已经有了流行的风格。对于你的例子(C),我会选择微软风格。最后:只有项目经理(高级程序员)有权进行调整

一个人如何证明某事是正确的 就在别的事情上


简单地说:就是不要。选择一种编码风格,传达它,并实施它。

编码风格有两个主要方面:

  • “我应该把大括号放在哪里?”类型问题-这些通常不重要,也就是说,没有真正的理由选择一种样式而不是另一种样式
  • 实际的编码规则,就像我们在函数的中间使用返回一样。
  • 在我看来,对于#1类问题,任何辩论都没有意义。只需在标准文档中设置一个标准,并强制执行它(稍后将对此进行详细介绍)

    至于第二个问题,老实说,我不确定以后是否应该这样做。我个人喜欢用返回值来检查错误条件的喷洒函数,我知道有些人在实践中会畏缩。但在一天结束时,我们通常可以很好地阅读彼此的代码。这类问题更多的是关于你喜欢如何表达自己,什么对你来说更容易写,我不希望一家公司制定的规则达到这样的水平

    至于如何实施,标准文档是好的,但以我的经验,它们从未被仔细阅读或遵循,很快就会被遗忘。最好的方法是使用某种自动工具,告诉您违反了标准


    例如,即使是一个全新的Java程序员,我也知道何时使用大写/小写标识符,这仅仅是因为Eclipse让我(悄悄地、不引人注目地)知道了标准是什么。

    应该是社区维基百科,更不用提重复的几个问题了。这对客户机是有好处的,假设他们已经阅读了它。代码检查器是一种更好的方法,其中某人的代码可以根据设置通过或失败。参见Vadim的答案。编码标准文档是开发团队内部的……每个开发人员都阅读该文档,以便了解团队的编码标准。这与客户无关。客户永远不应该看到你的团队的编码标准(当然,除非他们要求)。@Justin:同样,这很好,但它并不能阻止我提交不同风格的代码-让你回到起点,OP在那里&询问如何停止。使用发布的标准是一个更好的主意。这可以节省您的时间,而且人们很有可能已经熟悉他们了。关闭