想象一下,你有一些具有某些属性的类。这个类有一个私有方法,它根据参数计算一些东西。 例如(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) {/*...*/}
想象一下,这个方法是一个散列方法,知道它用于生成散列的参数可能很有用。
那么,你认为这是一个好的做法吗?为什么?
答案 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。