Fja*_*cka 0 javascript ternary-operator
我试图了解这段代码是如何工作的.我知道三元运算符是,condition ? option1 : option2但我不知道这在这种情况下是如何工作的.
constructor(minSupport: number, minConfidence: number, debugMode: boolean) {
this.minSupport = minSupport ? minSupport === 0 ? 0 : minSupport : 0.15;
this.minConfidence = minConfidence ? minConfidence === 0 ? 0 : minConfidence : 0.6;
this.debugMode = debugMode || false;
}
Run Code Online (Sandbox Code Playgroud)
这个:
this.minSupport = minSupport ? minSupport === 0 ? 0 : minSupport : 0.15;
Run Code Online (Sandbox Code Playgroud)
翻译成:
if (minSupport) {
if (minSupport === 0) {
this.minSupport = 0;
} else {
this.minSupport = minSupport;
}
} else {
this.minSupport = 0.15;
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,其他的应该很容易解决.就个人而言,我不喜欢你发布的嵌套三元表达式.一个好的if/then陈述可以更简单地计算出逻辑流.
这是一个案例研究,为什么尽可能简洁地编写代码并不能使代码变得更好.
将所有东西都推到一条线上会使得阅读和理解流程变得困难.我发现添加一些格式会使事情更加清晰:
this.minSupport =
minSupport
? minSupport === 0
? 0
: minSupport
: 0.15;
Run Code Online (Sandbox Code Playgroud)
有多种方法可以格式化代码,使其更容易消化.在这一点上,我们可以通过逻辑:
如果minSupport是真的:
检查是否minSupport为零(字面上不可能发生,因为0不是真的).如果是(它不能)设置this.minSupport为0.否则,设置this.minSupport为minSupport包含的任何值.
否则如果minSupport是假的:
设置this.minSupport为0.15
因此,在消化了这个逻辑的情况下,很明显有一个二次检查意图保留其价值0.代码是错误的,修复是改变逻辑:
this.minSupport =
minSupport
? minSupport
: minSupport === 0
? minSupport
: 0.15;
Run Code Online (Sandbox Code Playgroud)
现在通过该重排,我们可以查看逻辑并看到它可以被压缩.我们要设置this.minSupport到minSupport如果minSupport是truthy 或者如果minSupport是0.
简化如下:
this.minSupport =
minSupport || minSupport === 0
? minSupport
: 0.15;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |