是否传递参数

时间:2012-08-08 10:24:14

标签: java parameters

想象一下,你有一些具有某些属性的类。这个类有一个私有方法,它根据参数计算一些东西。 例如(Java):

public class Foo {
    private Lorem c1;
    private Ipsun c2;
    //...
    private Justo c12;

    private Double selfExplanatoryMethodName(){
        //This method uses c1, c3 and c4
    }
}

使用方法的标题更好的做法如下:
 private Double selfExplanatoryMethodName(Lorem c1, Amet c3, Sit c4) {/*...*/}

想象一下,这个方法是一个散列方法,知道它用于生成散列的参数可能很有用。

那么,你认为这是一个好的做法吗?为什么?

5 个答案:

答案 0 :(得分:1)

参数化或不参数化是问题......

...当它只是一个接受输入并返回输出而不依赖于对象状态的函数时:所以,你必须有一个接受参数并执行一些魔法的方法返回一个值...一个真正的函数 - 你应该使用参数。你的方法是一个黑盒子。 Java为这些方法提供了static关键字,您应该将静态方法用于完全依赖于参数的任务。这些案例应该有参数化方法。例如:

 public static String encodeString(String input, String format)

...当它是一个单独处理对象状态并返回值的函数时:,如hashcode方法。你应该从不传递参数......方法应该是一个实例方法......它应该使用实例字段来做魔术。这是一个例子:

 public String toString(){
    return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2
 }

...当需要一些外部输入和一些状态属性时:就像你有一个基于外部输入操作状态对象的方法来返回结果。仅传递 外部需要的参数。例如:

 public String toFormat(String format){
    if("json".equals(format)  //<-- this is external agent.
      return new JSONObject(this).toString();
    else
      return this.attr1 +", " + this.attr2; //<-- see I haven't passed attr1, attr2

 }

所以,这取决于你在做什么。


编辑1:(回答评论)

Why?

这是关于最小化冗余。这就是为什么上面提到的要点应该作为经验法则的原因:do not create unnecessary objects; do not bloat the parameter list

我提到了哪种情况下的良好做法。你重视你的情况并决定使用什么。所以,如果你有方法说,

int add(int a, int b){returns a+b;} 

传递a和b并将此方法作为静态方法是一种很好的做法。但是new Additor(a, b).add();在哪里

public int add(){return this.a + this.b;} 

不太好主意。

答案 1 :(得分:0)

可能取决于您使用的语言。但根据我的经验,我会说是的,这是一种很好的做法

阅读和阅读更容易/更快了解是否包含参数。如果你希望它更糟糕,你也可以跳过返回值,或者更糟糕的是只使用全局变量。

答案 2 :(得分:0)

这取决于方法的作用。如果方法对对象做了某些事情,我认为参数是错误的。如果该方法对该对象做了某些事情并且需要附加信息(例如另一个对象),则参数是强制性的。如果该方法对该对象不执行任何操作,则应检查它是否应该是静态方法。

答案 3 :(得分:0)

我完全是作为Java程序员说话,但是如果你有一个访问该类字段的方法,我从来没有在方法中放置参数并以这种方式传回字段。相反,我会在方法的顶部发表评论(尤其是使用javadoc)这个方法究竟对字段做了什么。撕掉字段并将它们传递给各种类型的软件会破坏封装的目的。

至少对于面向对象的编程,传递类已经作为字段存在的东西对我来说永远不会有意义。通过在课堂上创造一个领域,我们会说“嘿,我认为这对你来说是有用的信息,你可能需要以后的东西”。如果它实际上从未真正使用该信息并且总是在飞行中提供信息,为什么要保留它?

底线:如果变量实际上属于一个字段,并且它的功能还不够清楚,添加更多参数并将类的字段传回来并不是让代码清晰的方法。如果有的话,它会使代码本身更加混乱,并且不必要地冗长。

答案 4 :(得分:0)

我不同意乔。

根据我的经验,依靠字段可以使代码更清晰,并通过减少混乱来提高可读性 一个类是一个白色的盒子,读者可以依靠你直观选择的字段名来推断出方法对它们的作用。 此外,它依靠字段更高(可见)cohesion