Ell*_*lle 24 javascript if-statement ternary-operator
我查看了Raphael.js源代码,了解他如何将RGB值转换为HSB.我发现了他所做的功能,当我碰到这个漂亮的三嵌套三元运算符时,我正在将它转换为Python:
H = (C == 0 ? null :
V == r ? (g - b) / C :
V == g ? (b - r) / C + 2 :
(r - g) / C + 4
);
Run Code Online (Sandbox Code Playgroud)
它引发了我一个循环,因为Python没有Javascript所做的那种三元运算符.我花了一段时间查看它并最终将这个有点理智的代码(仅使用if/else)从中删除:
if (C == 0) {
H = null;
} else {
if(V == r) {
H = (g - b) / C;
} else {
if(V == g) {
H = (b - r) / C + 2;
} else {
H = (r - g) / C + 4;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的解释是否正确?我只是问这个,因为如果不正确,我会面临很多调试.所以.我"明白了"吗?
And*_*aus 29
根据我个人的喜好,精心对齐的嵌套三元组击败了if-esle的混乱:
const H =
C == 0 ? null :
V == r ? (g - b) / C :
V == g ? (b - r) / C + 2 :
(r - g) / C + 4 ;
Run Code Online (Sandbox Code Playgroud)
Jos*_*eph 27
我认为你可以这样做以避免深度嵌套:
var H
if(C == 0){
H = null;
}
else if(V == r){
H = (g - b) / C;
}
else if (V == g){
H = (b - r) / C + 2;
}
else {
H = (r - g) / C + 4;
}
Run Code Online (Sandbox Code Playgroud)
如果您的 JavaScript 代码库包含与所讨论的类似的嵌套三元语句,请考虑将格式转换为菊花链三元语句。
H = (C == 0) // Is C zero?
? null // Then return `null`, else ...
: (V == r) // Is V equal to r?
? (g - b) / C // Then return this value, else ...
: (V == g) // Is V equal to g?
? (b - r) / C + 2 // Then return this value
: (r - g) / C + 4; // Otherwise fall back to this default value
Run Code Online (Sandbox Code Playgroud)
他们只是沿直线从上到下读取,一旦遇到真实条件或回退,就立即返回一个值。
–嵌套的三元组很棒,埃里克·埃利奥特
H = C == 0
? null
: V == r
? (g - b) / C
: V == g
? (b - r) / C + 2
: (r - g) / C + 4
Run Code Online (Sandbox Code Playgroud)
我见过Dan Abramov使用这种缩进放置模式.虽然我不喜欢条件运算符?不再直观地遵循条件,但我更喜欢@Lolmaus的例子,因为无论条件的大小如何,缩进总是一致的.
实际上,你先来了解一下它作为?真正的:假是视觉上直观的在这里.通过这种方式,我发现三元组更容易发现并区别于周围的代码.
可以用更简单的方式编写相同的逻辑:
var H
if (C == 0)
H = null;
else if (V == r)
H = (g - b) / C;
else if (V == g)
H = (b - r) / C + 2;
else
H = (r - g) / C + 4;
Run Code Online (Sandbox Code Playgroud)
可以省略花括号,因为每个条件中都有一个语句.鉴于条件是相互排斥的,使用else if比嵌套更清晰if.
| 归档时间: |
|
| 查看次数: |
41347 次 |
| 最近记录: |