我无法理解这句话:
while (a && b) {
a > b ? a %= b : b %= a;
}
它到底做了什么?它可以转换为if语句吗?
答案 0 :(得分:2)
让我们把它分解成几部分:
while (a && b) {
}
这意味着a
和b
是" truthy"值(在这种情况下,不是0
)然后循环将继续:
a > b ? a %= b : b %= a;
这是一个三元运算符:x ? y : z
如果x
的计算结果为true,则执行y
。如果x
评估为false,请执行z
。
因此,在这种情况下如果a > b
为真,
a %= b
将会运行。 a %= b
是a = a % b
的缩写。
如果a > b
为false,
b %= a
将会运行。同样,b %= a
是b = b % a
的缩写。
因此,循环将继续运行,直到a
或b
等于0。
答案 1 :(得分:2)
您的代码使用Euclid's algorithm计算a
和b
的最高公因子。
它使用三元运算符代替if语句和其他难以理解的可爱。
a ? b : c
是一个表达式,如果b
是真实的,则评估为a
,否则为c
。请注意,它是一个带有值的表达式,并且使用它纯粹用于副作用或复杂计算时使用if语句会更清晰。
while条件中的a && b
可确保在a
或b
为零后循环停止。
a %= b
相当于a = a % b
,其中%
是余数运算符。
如果您不熟悉这种语法,可能值得阅读MDN's JavaScript Guide。
答案 2 :(得分:0)
您可以轻松扩展if if:
while (a && b) {
if (a > b) {
a %= b;
} else {
b %= a;
}
}
%=表示使用右侧的mod,并将结果分配到左侧。
答案 3 :(得分:0)
这是一个三元运算符,使用方法如下:
条件? value_if_true:value_if_false
(a> b)? (a%= b):( b%= a)
while (a && b) {
if ( a > b ) {
a %= b
}else{
b %= a;
}
}