多个条件与多个语句

Multiple conditions vs. multiple statements

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

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

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

我认为将所有内容合二为一比分成两部分更好。原因是您会遇到一个 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;
}

如果您的编译器运行良好,就像现代浏览器中的任何编译器一样,您只需关心 &&|| 符号的性能。 || 只会评估左侧,如果为假,它将继续评估右侧。巧妙地使用它们。

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

(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 说明了性能和逻辑的差异以及直接影响和副作用。 运行 它并查看控制台。