我正在写一个小的模拟程序,我有一个 void move(int n)
函数和a void move()
功能。正如他们的名字所暗示的, move(int n)
制造 n
一次移动 move()
只有一个动作。
现在我想到了两种实现它们的方法。方法1是:
public void move()
{
// make one move
}
public void move(int n)
{
for (int i=0;i<n;i++)
{
move();
}
}
方法2:
public void move(int n)
{
for (int i=0;i<n;i++)
{
// make one move
}
}
public void move()
{
move(1);
}
显然,当移动次数较大时,方法2提供了时间效率优势,因为我们不会每次移动时都进行单独的函数调用。但是,从现在起,每一步的实施都是以一种全新的方式实施的 for loop
,以后更改实现(例如从每次移动中获取元数据或分析数据)似乎没有很好的模块化。在一次进行多个单步移动的情况下,方法2需要额外的函数调用和额外的循环设置。
假设我们不知道特定的未来用例,我应该如何决定采取哪种方法?
3条答案
按热度按时间kmbjn2e31#
也许我遗漏了什么,但看起来你只需要一个函数
对于只需要进行一次移动的情况,初始化变量i和再进行一次比较所需的额外时间可以忽略不计。
hwamh0ep2#
实际上,一个好的jvm应该使它们相当等价(主要是内联的,请看这个答案);相反,您应该将重点放在可读代码上,这无疑会使第一个代码更可取。如果这真的很重要,我建议尝试用随机用例(例如所有单个移动、所有大量移动、混合)来分析代码;您可能必须做出一些您认为最有可能的定性决策,并且要记住,如果您正在编写可能被移植的代码,那么它将依赖于实现。
sqxo8psd3#
我建议你在移动时只使用一个功能,一个移动或多个移动。你应该使用第一种方法并保持
void move()
private
让我们void move(int n)
调用这个函数public
.