Javascript 多个条件与多个语句

Javascript 多个条件与多个语句,javascript,phaser-framework,statements,multiple-conditions,ifs,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.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;
}

如果您的编译器工作良好,就像现代浏览器中的任何编译器一样,那么您只需要关心性能的
&&
|
符号<代码>| |将只计算左侧,如果为false,则将继续计算右侧。聪明地使用它们。

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

(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
中的表达式很昂贵,那么它可能会产生显著的差异。如评论中所述,两个示例之间的差异也改变了逻辑。在这种情况下,将第二条语句设为
,否则if
将保留原始逻辑


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

根据逻辑,您应该关心两个检查是否都为真,然后第二个示例将处理2个损坏,如果等式只有一侧为真,则将处理2个损坏或通过,因此第一个示例在这种特殊情况下(以及大多数情况下)会更快,我认为性能差异可以忽略不计。也就是说,在我有多个
if
条件的情况下,我会比其他任何条件都更努力提高可读性。@lux如果这是在游戏循环中运行的,就像预期的那样,尽管性能很小,但会发生多次,仅仅为了了解这一点,你应该知道,如果第一个条件是true@johnny5所以从其他人所说的,在我不需要处理两个条件都为真的游戏循环中,最好在一个语句中使用多个条件。如果我误解了你的回答,请回答我。谢谢:)想一想再使用这些if语句一次,它们是怪物!我称之为火车失事。谢谢你的回答。:)
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;
}