在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
无论编辑如何,这都是编写代码的准则。较新的编辑具有出色的“定义”功能,书签也有助于此。但是我对编辑器独立模式感兴趣。
答案 0 :(得分:0)
在IDE中,方法的顺序对我来说似乎更不重要。我没有阅读整个源代码,而是我这样继续:读取一个方法,发现一个有趣的函数调用,请求IDE打开该函数的声明(可能在不同的源中)。或者找一个有趣的函数,想知道它在哪里使用,请让IDE列出引用。
IDE通常会显示类中方法的摘要列表,并对其进行排序并以各种方式对其进行过滤,因此不再需要端到端读取。
我想要的一件事就是“这个课程的理解是什么”。有两件事可以帮助你:接口编程 - 以及良好的类文档。
因此,我鼓励明确记录该课程的职责,通常用特定的界面表达。源中的方法顺序对我来说不那么重要。
答案 1 :(得分:0)
在单独阅读方法的代码时,您希望了解该方法的意图。如果方法内部的抽象级别良好,并且所有其他被调用方法的名称在其上下文中有意义,则您无需了解它们以理解代码。你会把它们视为黑盒子。
一些有助于在小范围内实现更高可读性的原则:
Single Level of Abstraction Principle
Single Resposibility Principle (pdf)
不要忘记,总是使用好名字!这就是为什么你的例子不适合这个讨论。
答案 2 :(得分:0)
如前所述,对于任何体面的IDE,文件中的函数顺序都不是问题。面向对象语言也是如此,其他导航方法比顺序读取更有用。例如:class heirarchy;班级大纲;打电话给heirarchy。如果您真的错过了函数定义,那么语言中可能会出现符合此目的的内容,例如:C ++中的纯虚拟类(如果这就是它们被称为)或Java中的接口。
然而,话说回来,每当我重新组织源文件中的文本时,我总是倾向于根据它们的凝聚力来排序函数[1]。之后我按顺序执行 born 。如果像我的例子一样,我有一个函数来生成其他较小的辅助函数,我会将它们放在它们从中提取的位置。我只是发现更直观地首先阅读重要内容,忽略较小的细节直到我需要了解它们,并且首先看到更大的方法通常会实现这一点。这看起来更像是你的第二个例子。
总结一下,我会去大而小,或公开然后私人帮助。
[1]如果一个类/文件中的分组太多,这是一个代码气味,表明它们应该分成更小的单独单元。