我正在编写一个小型模拟程序,其中有一个 void move(int n)
函数和一个 void move()
函数。顾名思义,move(int n)
一次进行 n
次移动,而 move()
只进行一次移动。
现在我想到了两种实现它们的方法。方法一是:
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 具有时间效率优势,因为我们不需要每次移动时都进行单独的函数调用。然而,由于现在每个 Action 的实现都是在 for 循环中实现的,因此稍后更改实现(例如从每个 Action 中获取元数据或分析数据)似乎不具有良好的模块化性。在一次进行多个单一移动的情况下,方法 2 需要额外的函数调用和额外的循环设置。
假设我们不知道 future 的特定用例,我应该如何决定采用哪种方法?
最佳答案
实际上,一个好的 JVM 应该使它们相当等效(主要是内联,请参阅 this answer );相反,您应该专注于可读代码,这无疑使第一个代码更可取。如果这真的很重要,我建议尝试使用随机用例来分析您的代码(例如所有单个移动、所有大量移动、混合);您可能必须做出一些您认为最有可能的定性决策,并且请记住,如果您正在编写可能被移植的代码,那么它将依赖于实现。
关于java - 我应该采用哪种方法来实现这两个 move() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909073/