在哪个顺序定义吸气剂和吸气剂?[关闭]


14

订单中定义吸气剂和吸气剂是否有最佳实践?似乎有两种做法:

  • 吸气剂/设定剂对
  • 首先是吸气剂,然后是二传手(或者反之)

为了说明不同之处,这里是一个getter / setter对的Java示例:

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public int getVar2() {
    return var2;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

这是第一个使用getter,然后使用setter的Java示例:

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public int getVar2() {
    return var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

我认为后一种排序在代码和类图中都比较清晰,但是我不知道这是否足以排除其他排序类型。

Answers:


8

第一种方式。如果可能的话,请始终将它们组合在一起,或者通过对相同成员起作用的相关功能保持紧密联系。

如果您以这种方式排列代码,则它可以使重构更加清晰和容易,因为如果可以将一个类从执行过多任务的另一个类中分解出来,则可分解部分通常围绕特定的成员变量。

通常,当您可以在同一页面上看到对象/变量的整个生命周期中的所有内容时,调试,理解和操作代码会更容易。我要说的是,主要基于范围和字母顺序等肤浅的代码布局实际上将意味着您错过了重构的机会,因为您看不到它们。


您是否要进一步解释为什么在相同成员上运行的功能应保持在一起?
NN

添加了一些原因。
本尼迪克特

25

如果您是团队成员,请照常做。否则,请选择您更喜欢的一个。在重要的设计选择范围内,这大概在“我应该用哪个拇指敲空格键”附近。


7
完全同意。这涉及的“不出汗的小东西”的标题下,这应该是每个人的编码标准规则下#0(这规则#0“编码标准C ++”由Herb萨特和安德烈Alexandrescu的英寸)
大卫Hammen

我敢肯定,人们对于应该使用哪个拇指击空格键已经争论了很多)))
superM 2012年

@Michael我也很反对。我尝试只使用左手,但是这非常困难,而且打字速度也变慢了。
axblount 2012年

@axblount我是右撇子,但始终使用左手拇指。只是尝试了我的权利,并拥有与您描述的相同的体验。由于某种原因,我也用左手键入“ y”。
KChaloux 2012年

6

它也可以取决于语言。在Java中,这两种顺序都没有真正的优势,但是例如,在C#中,您具有“属性”的概念,该属性将getter和setter组合在一起,因此可以强制执行该顺序。在像C ++这样的语言中,您可能希望在getter和setter(例如,私有setter,public getter)上具有不同的可见性,您可能会做相反的事情,因为对多个方法只给出一次可见性修饰符,而不是对每种方法分别给出。


5

据我所知,没有单一的约定。关于文件组织Oracle Java Code Conventions部分没有明确提及getter和setter的位置,但确实指出:

这些方法应按功能分组,而不是按范围或可访问性分组。

这没有提供任何指导-我可以争辩说任何一个安置都符合此条件。

需要考虑的一点是,与作为文本代码组件相比,现代IDE允许您对文件结构拥有更多抽象视图。结合强大的搜索工具,可以轻松浏览文件并在大型文件中找到合适的方法。

作为示例,Eclipse提供了Outline视图,让您以不同的方式对方法和字段进行排序和过滤,并直接导航到文件中的位置。NetBeans具有类似的功能,我怀疑大多数其他IDE也会这样做。

这可能唯一重要的是您是否在IDE之外阅读代码。一个示例可能是使用外部代码查看工具或查看版本控制系统中的增量。

最好的解决方案是在项目中的各个文件之间保持一致。找到一个标准,记录下来并坚持下去。


1

成对地将单个字段的getter和setter分组在一起。

将所有getter和所有setter组合在一起,很难区分哪个字段只是getter或setter。

当我阅读代码或寻找特定功能时,我将一个类设想为具有字段,每个字段都有一个getter和一个setter。对于我来说,一个班级有一个getters组和一个setters组对每个人来说都是没有意义的。


因此,您的论点是字段的getter应该与该字段的getter配对,因为这样可以更轻松地概述类中某些字段的处理方式?
NN 2012年

那,以及什么是类的概念模型。类应主要按功能进行组织。创建类时,您可能会决定它需要一个公共可见的可变字段。那就是概念上的“功能”,而不是通过getter和setter方法的语法表达。
M. Dudley

0

Ever Java IDE可以为您生成getter和setter。只需使用该功能,并保持这些方法(如IDE创建它)的顺序即可。这是生成的代码,请不要不必要地接触它。


我知道这一点。但是,例如在Eclipse中,您可以选择不同的顺序
NN 2012年

对。默认选项“ getter / setter对中的字段”似乎更有用,因为您可以在以后添加更多字段并生成更多访问器,而不必担心哪种方法放在哪里,只需将两者放在最后即可。
user281377 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.