1

以下两个代码块是否应该等效?我的直觉说是的,但它们会产生不同的行为。

第一个代码块按我预期的方式工作,第二个没有。我真的很想使用第二种风格,因为它使实际的代码(这里省略了一些)更短更容易。

if (expanding) {
  radius += delta;
  if (radius > maxRadius)
    expanding = false;
} else {
  radius -= delta;
  if (radius < minRadius)
    expanding = true;
}

相对

if (expanding && (radius += delta) > maxRadius) {
  expanding = false;
} else if ((radius -= delta) < minRadius) {
   expanding = true;
}
4

2 回答 2

1

如果expandingtruebut radius + delta <= maxRadius,则第一个版本递增radiusdelta完成;第二个版本radiusdelta然后递增第一个条件,然后递减radiusdelta将它留在它开始的地方。

所以:不,不应该期望这两个块的行为方式相同。在我看来,即使您添加! expanding &&else条件,第一个版本也更加清晰。

于 2013-08-13T22:47:50.430 回答
0

像这样的东西怎么样:

radius += expanding ? delta : -delta;
if (expanding && radius > maxRadius)
   expanding = false;
if (!expanding && radius < minRadius)
   expanding = true;

这将增加半径和切换扩展的功能分开,但仍然简化了原始版本的代码。

于 2013-08-13T22:34:08.377 回答