foo
和bar
。目前,我像这样预先形成它们:
public void foo() {
foovar = true;
}
public void bar() {
barvar = true;
}
现在我需要一种方法来预先形成这两件事。在我看来,我有两个选择:
1:
public void foobar() {
foovar = true;
barvar = true;
}
2:
public void foobar() {
foo();
bar();
}
我该怎么办?在Java的上下文中,什么更有效?其他语言?
答案 0 :(得分:2)
答案取决于很多因素。如果你真的什么都不做,只是将一个字段设置为一个值,并且如果你的类是一个内聚的代码块的内部部分,那么这些方法之间没有太大区别。
如果你只是展示一个例子,但是实际的方法比这里显示的更多,或者如果将类作为公共API暴露给更广泛图片的其他模块/部分,那么你绝对应该更喜欢重用代码调用这两种方法。
关于效率,除非您关心方法调用开销是否达到0.2 ns或高达0.4 ns,否则不应该担心它。
答案 1 :(得分:1)
到目前为止,第二种选择是最好的。
假设您想要更改该功能的行为?使用第一个选项,您现在必须更改两段代码。使用第二个选项,您只需要更改方法。
假设您想要另一个方法来执行foo()和bar()以及baz()。现在,在选择第一个选项时,你会有更多的代码重复:
public void foobarbaz() {
foovar = true;
barvar = true;
bazvar = true;
}
虽然
public void foobarbaz() {
foobar();
baz();
}
为您提供更多灵活性和更少代码重复。
答案 2 :(得分:0)
虽然两人都在做同样的事情,但我会选择
public void foobar() {
foo();
bar();
}
以后如果我只想更新barvar
而不是foovar
,那么我需要编写一个新方法。
我更喜欢用最小的方法来编写代码。
答案 3 :(得分:0)
在你的例子中,它并不重要。从性能POV方法1.应该更快一点。如果你的foo()和bar()做的不止于此,那么值得遵循第二种方法
答案 4 :(得分:0)
我会选择第二个,因为它们是松散耦合的,从长远来看它有所帮助,因为它们都是分开的,每个都可以进化而不管另一个。在第一种选择中,就像你用同样的方法混合驴和猴子,在第二种方法中,我们可以将它分开,当你想只给猴子而不是驴子时它真的很有帮助;)
public void foobar() {
foo();
bar();
}
但是,这当然是一种测试方法,它不会分配布尔值。
答案 5 :(得分:0)
我赞成可维护性和可读性而不是性能直到性能是一个已知问题。在上面的示例中,它不会成为问题,因此我会选择第二个选项。
答案 6 :(得分:0)
我认为在你的情况下并不重要。
他们的效率几乎相同。如果您的方法中有越来越复杂的操作,则应将它们分成逻辑部分。
答案 7 :(得分:0)
使用:
public void foobar() {
foo();
bar();
}
因为当foo()或bar()发生变化时,你不需要改变你需要在其他实现中执行的foobar()。这些是简单的函数,但是如果你有更复杂的函数,你的代码的控制和调试就会变得更难。
答案 8 :(得分:0)
你暗示效率是唯一的考虑因素。这种选择或这种选择会影响应用程序性能的可能性非常低。
您的主要问题(几乎)始终是编写现在有效且在更改后继续工作的代码。复制一段逻辑,如
barvar = true;
很糟糕,因为现在当逻辑发生变化时,你有两个地方可以改变。一般不要重复自己。