你如何编写其他人手写的代码,而这些代码中没有任何人可以编写代码?

时间:2008-09-02 12:29:46

标签: readability

你如何编写易于被其他人阅读的代码以及没有编写任何部分代码的代码?

13 个答案:

答案 0 :(得分:9)

确保其他人可以阅读您的代码的最佳方法是确保其清晰简洁。即,

  • 为变量,函数和类使用自记录名称。
  • 评论复杂的算法,以便读者不必花费很长时间来弄清楚它的作用。
  • 确保标签和换行符在整个代码中保持不变。

除此之外,你开始进入可能有点主观的领域,大多数人应该就这些项目达成一致。

答案 1 :(得分:6)

此问题是主观的,应根据FAQ

在StackOverflow上避免使用
  

我不应该提出什么样的问题   问这里?

     

避免提出问题   主观,议论或要求   扩展讨论。这是一个地方   对于可以回答的问题!

简短的回答是:

  • 避免过度评论:

    // add one to the count:
    i++;
    
  • 使用好的变量和方法名称:

    int x = i + j;
    int runSum = prevSum += newValue;
    
  • 在可用的地方使用编码速记:

    if (x == y)
    {
      z = a;
    }
    else
    {
      z = b;
    }
    z = (x == y) ? a : b;
    

答案 2 :(得分:6)

你可能想看看Robert C. Martin的Clean Code。它提供了许多有用的实践来确保您的代码可读。

此外,如果您的代码受到许多彻底测试代码的单元测试的支持,它为用户提供了一种通过查看测试正在进行的操作来理解代码的方法。您还会发现,如果您遵循测试驱动开发过程,并且您为每个功能部分编写测试,那么您的功能往往很小,只做一件事并做得很好,而且往往更像是一个故事,而不仅仅是一个故事。一个庞大的复杂网络“东西”。

测试往往比评论更新。我经常忽略评论,因为它们很快就会过时。

答案 3 :(得分:4)

保持代码美观,清晰和简单。当它显而易见时,不要评论你正在做什么(例如我知道什么是foreach或者是什么,我通常不需要解释)。

使简单事物占用更少行的代码技巧(例如自动属性)也很好。

答案 4 :(得分:4)

购买&阅读Code Complete 2。有很多关于编写易于阅读/维护代码的东西。

答案 5 :(得分:2)

我不认为这是一个主观问题,但它太宽泛了!这不仅仅是评论和给出好的变量名称。它涉及人类如何理解代码。因此,您的系统必须以一种方式实现,读者可以通过两种方式轻松构建其设计的心理模型:

  • 自上而下:假设用户知道系统域,他倾向于假设它将如何实现,因此他将扫描系统包和类,寻找他能识别的实体。为你的课程提供良好的名称并正确地模块化它将非常有用。

  • 自下而上:一旦用户到达部分代码,他就会从那里开始导航,构建知识块。如果您的系统具有较低的内聚力和大量隐式依赖关系,则用户将会丢失。

Kent Beck采用三个原则:沟通,简单和灵活。当然,有时候你必须简单地换取灵活性,反之亦然。

这可以继续下去。这个问题的答案适合一本大书。正如@rmbarnes建议的那样,购买并阅读Code Complete 2.我还建议Kent Beck Implementation Patterns - 它与您的问题高度相关。

答案 6 :(得分:1)

  1. 记录代码,说明它为什么会这样做。
  2. 确保所有变量函数等都以一致且描述性的方式命名
  3. 使用空格将代码的逻辑部分组合在一起,以便在阅读时流动。
  4. 按逻辑顺序放置功能/方法等。
  5. (这个是我个人的偏好)确保代码可以在屏幕上轻松阅读,而不必横向滚动(有些人也说垂直,但这似乎并没有打扰我)。

答案 7 :(得分:1)

由于其他人在我读这个问题时几乎都在说我正在思考的内容,所以我只会分享两本与你可能有兴趣阅读的这个主题有关的书。这些书使用开源代码示例来解释如何读写高质量的代码。除了Code Complete之外,我认为当你想用任何语言编写好的代码时,它们都是宝贵的资源。

答案 8 :(得分:1)

我的规则:

  1. 给所有东西一个有意义的名字,并称之为它。避免对变量使用“x”和“y”。
  2. 不要缩写任何内容。我不关心变量名称有多长,不要缩写,即使有注释。缩写的解释是主观的。 Cmp是指计算机吗?电脑?公司?赞扬?使它成为一个强有力的规则,没有例外,并且易于遵循。
  3. 不要在同一行上放置多个语句。每一行都执行一次操作。
  4. 避免像瘟疫那样的匈牙利符号。还是ntHungarian?
  5. 甚至对单行(if,for)子结构使用括号。压痕差异太容易丢失。

答案 9 :(得分:0)

可能最重要的一点是保持语法一致。我还要看一下你所写语言的设计指南。

答案 10 :(得分:0)

作为一名拥有多年经验的开发人员,这曾经是一个真正的问题。我甚至不能说我经过多少小时思考这个问题并在我的代码中尝试不同的东西。上面的答案也非常好。我只想添加一两件事。

  • 我们每个人都有不同的东西,使我们的阅读与其他阅读不同。你觉得容易阅读的东西可能真的很难让其他人阅读。

  • 代码的清洁度是一个非常重要的方面。很快就会忘记它。

  • 最重要的是:你是自己的老师。无论您遵循何种风格,您都希望根据自己的经验改变一两件事。几个月过去了,你必须回到原来的修补程序或文档,你会得到“我不敢相信我编写的代码就像那样”。记下代码可读性的问题,并确保不要再写这样的内容。

答案 11 :(得分:0)

我很可能是少数人,但我不介意空白。我喜欢WHITESPACE。由于编译器将其取出并且HD空间非常便宜,我喜欢在我的代码中使用空格。

例如我喜欢:

        int total = 10;
        int sum = 0;

        for (int i = 0; i < total; i++)
        {
            sum += i;
        }

        // Next coding statement is a space below the bracket
        return sum;

我不喜欢:

        int total = 10;int sum = 0;
        for (int i = 0; i < total; i++)
        {
            sum += i;
        }
        return sum;

即使技术上不需要,我也会在Brackets中加入。最好的例子是if语句。我发现这有助于提高可读性。

if(true)
    // some action

if(true)
{
   // Some action
}

对我来说最好的代码是尽可能简单的代码。评论尽可能少,最重要的是

答案 12 :(得分:0)

这里有很多好的答案,我想从喜欢大局的工程师的角度添加一些东西。我经常发现,在类图或包级别概述(图表/注释等)方面获得高级概述,如果在文件中没有任何10行标题注释来帮助我很多,那就哎呀。我们可以使用Doxygen / Javadocs来生成它们,或者花10到15分钟来记下评论部分中的内容。

他们不必100%准确,我怀疑类/包的整体结构会在没有完全重写的情况下发生变化。

我个人认为这种大图概述非常有用,我相信还有其他人也有同感。