在方法中使用单独的技术与在方法中的其他方法

时间:2014-03-04 14:11:17

标签: java methods theory

哇,这个标题听起来很混乱。希望这可以解决它。 我有两个可以执行的任务,foobar。目前,我像这样预先形成它们:

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的上下文中,什么更有效?其他语言?

9 个答案:

答案 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;

很糟糕,因为现在当逻辑发生变化时,你有两个地方可以改变。一般不要重复自己。