用于声明函数以提高可读性的模式

时间:2009-11-12 17:14:18

标签: design-patterns function code-readability

在C ++中,函数需要在调用之前声明。这可以与函数签名一起解决,但在大多数情况下,在新的编程语言C#,Python,ETC中不再需要这样做。

然而,在阅读其他人,代码以及必须在类中构造函数时,我发现我错过了C ++中存在的一致性。

在保持可读性和理解代码结构的同时声明/命令函数有哪些模式?

修改1


这是一个粗略的例子。

class A
{
  private FunkB()
  {
    ...
  }

  private FunkC()
  {
    ...
  }

  public FunkA()
  {
    FunkB();
    FunkC();
  }

  public FunkD()
  {
    FunkC();
    ...
  }
}

v.s。

class A
{
  public FunkA()
  {
    FunkB();
    FunkC();
  }

  private FunkB()
  {
    ...
  }

  private FunkC()
  {
    ...
  }

  public FunkD()
  {
    FunkC();
    ...
  }
}

修改2


无论编辑如何,这都是编写代码的准则。较新的编辑具有出色的“定义”功能,书签也有助于此。但是我对编辑器独立模式感兴趣。

3 个答案:

答案 0 :(得分:0)

在IDE中,方法的顺序对我来说似乎更不重要。我没有阅读整个源代码,而是我这样继续:读取一个方法,发现一个有趣的函数调用,请求IDE打开该函数的声明(可能在不同的源中)。或者找一个有趣的函数,想知道它在哪里使用,请让IDE列出引用。

IDE通常会显示类中方法的摘要列表,并对其进行排序并以各种方式对其进行过滤,因此不再需要端到端读取。

我想要的一件事就是“这个课程的理解是什么”。有两件事可以帮助你:接口编程 - 以及良好的类文档。

因此,我鼓励明确记录该课程的职责,通常用特定的界面表达。源中的方法顺序对我来说不那么重要。

答案 1 :(得分:0)

在单独阅读方法的代码时,您希望了解该方法的意图。如果方法内部的抽象级别良好,并且所有其他被调用方法的名称在其上下文中有意义,则您无需了解它们以理解代码。你会把它们视为黑盒子。

一些有助于在小范围内实现更高可读性的原则:

Single Level of Abstraction Principle

Single Resposibility Principle (pdf)

Composed Method

不要忘记,总是使用好名字!这就是为什么你的例子不适合这个讨论。

答案 2 :(得分:0)

如前所述,对于任何体面的IDE,文件中的函数顺序都不是问题。面向对象语言也是如此,其他导航方法比顺序读取更有用。例如:class heirarchy;班级大纲;打电话给heirarchy。如果您真的错过了函数定义,那么语言中可能会出现符合此目的的内容,例如:C ++中的纯虚拟类(如果这就是它们被称为)或Java中的接口。

然而,话说回来,每当我重新组织源文件中的文本时,我总是倾向于根据它们的凝聚力来排序函数[1]。之后我按顺序执行 born 。如果像我的例子一样,我有一个函数来生成其他较小的辅助函数,我会将它们放在它们从中提取的位置。我只是发现更直观地首先阅读重要内容,忽略较小的细节直到我需要了解它们,并且首先看到更大的方法通常会实现这一点。这看起来更像是你的第二个例子。

总结一下,我会去大而小,或公开然后私人帮助

[1]如果一个类/文件中的分组太多,这是一个代码气味,表明它们应该分成更小的单独单元。