以下两个代码块是否相同?我的直觉是肯定的,但他们会产生不同的行为。
第一个代码块以我期望的方式工作,第二个代码块没有。我真的想要使用第二种风格,因为它使实际的代码(其中一些在这里被省略)更短更容易在眼睛上。
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;
}
答案 0 :(得分:1)
如果expanding
是true
而radius + delta <= maxRadius
,则第一个版本会radius
增加delta
并完成;第二个版本按radius
递增delta
,然后第一个条件失败,然后radius
递减delta
,将其保留在启动位置。
所以:不,不应该期望两个块的行为方式相同。即使您将! expanding &&
添加到else
条件,我认为第一个版本很多更清晰。
答案 1 :(得分:0)
这样的事情怎么样:
radius += expanding ? delta : -delta;
if (expanding && radius > maxRadius)
expanding = false;
if (!expanding && radius < minRadius)
expanding = true;
这分离了递增半径和切换扩展的功能,但仍然简化了原始版本的代码。