多个条件与多个语句

时间:2016-03-17 13:58:02

标签: javascript phaser-framework statements multiple-conditions ifs

这些代码示例之间的性能有何不同?

if (this.game.physics.arcade.overlap(this.player, this.barels) && (this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency) || (this.player.position.y > this.game.height + 100)) {
  this.damage(1);
}

if (this.game.physics.arcade.overlap(this.player, this.barels) && (this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency)) {
  this.damage(1);
}

if (this.player.position.y > this.game.height + 100) {
  this.damage(1);
}

我知道两者都很好但我不确定哪一个更好。

3 个答案:

答案 0 :(得分:1)

我认为最好将它全部集中在一起而不是分成两部分。原因是你要用一个if语句而不是两个语句。

我会对第一个进行更改,并将其格式化为以下内容以便于阅读:

if (this.game.physics.arcade.overlap(this.player, this.barels)
                && (this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency)
                || (this.player.position.y > this.game.height + 100))
            {
                this.damage(1);
            }

答案 1 :(得分:1)

您可以将条件分开,不仅可读性,还有重用性,可维护性和可用性:

if (overlap() && frequency() || position())
{
    this.damage(1);
}

function frequency(){
    return this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency;
}

function overlap(){
    return this.game.physics.arcade.overlap(this.player, this.barels);
}

function position(){
    return this.player.position.y > this.game.height + 100;
}

如果您的编译器在现代浏览器中运行良好,那么您只需要关注性能的&&||符号。 ||只评估左侧,如果是假,它将继续向右侧。巧妙地使用它们。

答案 2 :(得分:1)

是。在第一个版本中,这......

(this.player.position.y > this.game.height + 100)

...只会评估......

this.game.physics.arcade.overlap(this.player, this.barels) &&
(this.game.time.now - this.srdicka.timecheck > this.srdicka.frequency)

...评估为false。在第二个版本中,它将被评估,无论如何。因此,如果第二个示例中第二个if中的表达式代价昂贵,则可能会产生显着差异。如评论中所述,两个示例之间的差异也会改变逻辑。在这种情况下,将第二个语句设为else if将保留原始逻辑。

这里有一个example,它说明了性能和逻辑与直接影响和副作用的区别。运行它并查看控制台。