对班级成员进行排序的最佳方法是什么?
我在这件事上与一名团队成员发生冲突。他建议我们应该按字母顺序对成员进行排序。我认为最好以语义的方式组织:重要属性优先,相关方法放在一起等。
你怎么看?
对班级成员进行排序的最佳方法是什么?
我在这件事上与一名团队成员发生冲突。他建议我们应该按字母顺序对成员进行排序。我认为最好以语义的方式组织:重要属性优先,相关方法放在一起等。
你怎么看?
我喜欢语义。按字母顺序对我来说似乎没有多大意义,因为当你在寻找一个成员时,你很少知道它到底叫什么。此外,如果您使用任何类型的命名约定(例如:匈牙利语),字母顺序将导致按类型分组,这可能不是您想要的。
将相关的班级成员分组在一起。我认为这将有助于其他程序员在第一次看到您的界面时更容易理解它。
有些人还发现将访问器和修饰符组织在单独的部分中很有帮助。
作为硕士论文的一部分,我已经研究了这个确切的问题。
按字母顺序排列的组织或基于公共/私人的组织更适合能够找到特定的事物。但是,在某些 IDE 中,您可以将大纲工具设置为按字母顺序排序,并为公共/私有使用特殊指标。
我的方法是根据使用的成员对方法进行分组:使用相同字段的方法之间通常存在概念上的联系。
实际上,我从中创建了一个可视化,这有助于快速导航和理解大型类的结构。
这只是我的观点,我相信它会不受欢迎,但语义排序的问题是它的主观性。每个人对于哪些方法应该紧密结合会有不同的看法。
Alphabetical 的优势在于它完全是客观的。它还减少了小变化的大差异,这在一个编码器选择不同的语义排序时很常见。
大多数 IDE 都有大纲或超链接,以使导航更容易。
编辑:澄清 - 我仍然先从公共到私人排序,但在同一访问级别内按字母顺序排列。事实上,我不做任何排序——我让我的 IDE 在保存时为我处理文件。
我从不通过查看代码来寻找成员。当我想跳转到成员定义时,我要么从导航栏/文档大纲/类视图中选择它,要么右键单击并选择“跳转到定义”。如果您有一个不错的 IDE,则不需要对成员进行排序。这在 Visual Studio 和我在需要时使用的另一个 IDE 中非常有效,KDevelop 至少支持这方面的基础知识。
无论如何,我倾向于按功能对成员进行分组,即属于某些特定功能的所有字段/属性/方法都放在一起。而且由于课程不应该太长,这就足够了。
假设您使用的是现代 IDE,只需单击两次鼠标即可找到所需的方法,因此我不确定采用特定的方法组织方法会给您带来什么。我确实使用了 stylecop ( http://code.msdn.microsoft.com/sourceanalysis ),它让我按公共/私有/方法/属性排序 - 我发现这已经足够了。
我真正认为这很重要的唯一一次是我编写了一个非常大的 jscript 程序,而当时的编辑器在查找函数时没有提供任何帮助。按字母顺序排列非常有帮助。字母化后,不难确定您需要在文件中的哪个方向查找方法。语义组织完全没有帮助。
在更高的层次上,我会这样组织我的课程:
然后对于方法/功能,我将按功能再次对其进行分解。例如,我会将实现接口的方法放在一个区域中,我会将事件处理程序方法放在一个区域中,等等...
你在写电话簿吗?
使用语义方法,您可以轻松地展示最重要的方法。我通常先使用构造函数,析构函数,然后是重要方法,然后是 getter 和 setter,最后是杂项。方法。最后,我对内部部分(私有方法、属性......)采取了类似的方法。
字母顺序不会传达有关您的班级的任何有用信息。如果您真的想查看按字母顺序排序的方法,您应该依赖 IDE 的功能。
您可以通过在 IDE 中对“方法显示”进行排序来从语义转换为字母。
你不能(自动)从字母到语义。
因此:语义。
我想我是喜欢按字母顺序排列的古怪案例之一。
首先,根据我的经验,将方法“语义”组合在一起往往会浪费时间。现在,如果我们正在讨论按范围/可见性对它们进行分组,那是另一回事。但是,如果成员更改了它的范围,您必须花时间移动成员以保持代码最新。我不想浪费时间改组代码来遵守这样的准则。
我也不是地区的忠实粉丝。当按范围对属性和方法进行分组时,它们往往会在一个区域中大喊大叫。但是在折叠区域中包含代码往往会隐藏写得不好的代码。只要您不必查看它,您就不会费心考虑重构它以使其可维护。
所以,我赞成按字母顺序排列。它简单、直接、切中要害。我不想将组封闭到区域中。而且由于 IDE 可以很容易地跳转到函数或属性定义,因此代码的物理布局没有实际意义。过去,您希望人们首先关注您的公共成员。现代 IDE 使这在很大程度上成为支持基于范围的布局的毫无意义的论据。
但字母布局的最大优势在于:在代码审查期间打印代码示例。我经常使用它们。它使查找函数或属性变得轻而易举。如果您曾经不得不费力地翻阅大量代码来查找函数或属性,而不仅仅是按字母顺序列出的内容,那么您就会知道我在说什么。
但是,正如他们所说,这些是我对这个主题的主观看法。你的旅费可能会改变。