多个条件与多个语句

Multiple conditions vs. multiple statements

本文关键字:语句 条件      更新时间:2023-09-26

这些代码示例在性能方面是否有差异?

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);
}

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

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

(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将保留原始逻辑。

下面是一个示例,说明了性能和逻辑上的差异,以及直接影响和副作用。运行它并查看控制台。

我认为最好

将它们全部放在一个而不是一分为二。原因是你会点击一个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);
            }

您不仅可以拆分可读性的条件,还可以拆分重用性,可维护性和可用性的条件:

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;
}

如果您的编译器运行良好,就像现代浏览器中的任何编译器一样,您只需要关心性能的&&||表示法。 ||只会评估左侧,如果这是错误的,它将继续评估右侧。巧妙地使用这些。