条件运算符,添加后检查结果的简化方法

Conditional operator, simplified way to check result after addition

我正在为朋友开发一款游戏,在 class 的统计数据构建部分,我有一个部分根据 class(战士、法师等),但最终统计数据不能小于零。

目前有这个:

this.stats[i] += type[i];
if(this.stats[i] < 0) {
    this.stats[i] = 0;
}

很好,有点多余,但我想知道是否可以在一行中完成此操作。我对此表示怀疑,但我很好奇我是否错了。

类似于:

this.stats[i] += type[i] < 0 ? // etc;

但我知道在将变量添加到当前 int 之前,这只是 运行 条件。另外,是的,只使用整数,不使用浮点数或字符串或其他任何东西,这些都在其他地方处理。

你可以写在一行中,但它不会很简单,因为你必须检查 this.stats[i] + type[i]

的总和
this.stats[i] = (this.stats[i] + type[i]) < 0 ? 0 : (this.stats[i] + type[i]).

所以,你可以在这里添加变量

var sum = this.stats[i] + type[i];
this.stats[i] = sum < 0 ? 0 : sum;

赋值如+=return赋值。如果运算符优先级不符合您的要求,只需添加括号即可。

if((this.stats[i] += type[i]) < 0) this.stats[i] = 0;

但可能 Math.max 更清楚:

this.stats[i] = Math.max(0, this.stats[i] + type[i]);