从上一次循环开始经过ms的干净方式?

时间:2011-03-15 19:13:57

标签: refactoring

是否有更清洁的方式来表达以下内容?

// initialize several vars here

long lastT = 0; 
while (looping) {
    long now = currentTimeMillis(); 
    long elapsed = now - lastT; 
    lastT = now;

    // code here
}

据推测,我只需要long elapsed=...(可能还有循环本身),但其他行可以压缩,也可以移动到别处。但是最好的方法是什么?

使用的语言并不重要,尽管上面是用Java编写的。

1 个答案:

答案 0 :(得分:1)

你可以说

long lastT = 0;
while (looping) {
  long elapsed = currentTimeMillis() - lastT;
  lastT += elapsed;

  // actual code goes here
}

以一个额外的算术运算为代价,为您节省一行和一个变量声明。请注意,在时间为浮点值的上下文中(例如,Python的time.time返回double)这样做最终会导致大量的聚合舍入错误。

如果你做了很多这样的事情并且让你感到困扰,那么你可以制作一个包含这些内容的经过时间计算的课程。然后你的循环可能是:

Stopwatch sw = new Stopwatch();
while (looping) {
  long elapsed = sw.timeSinceLastReading();
  // actual code goes here
}

对于它的价值,我通常使用与你给出的代码几乎相同的结构。