多个条件与多个语句
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 说明了性能和逻辑的差异以及直接影响和副作用。 运行 它并查看控制台。
这些代码示例在性能方面是否存在差异?
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 说明了性能和逻辑的差异以及直接影响和副作用。 运行 它并查看控制台。