短的,如果否则javascript

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)

And*_*ndy 5

这个:

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陈述可以更简单地计算出逻辑流.


zzz*_*Bov 5

这是一个案例研究,为什么尽可能简洁地编写代码并不能使代码变得更好.

将所有东西都推到一条线上会使得阅读和理解流程变得困难.我发现添加一些格式会使事情更加清晰:

this.minSupport =
  minSupport
    ? minSupport === 0
      ? 0
      : minSupport
    : 0.15;
Run Code Online (Sandbox Code Playgroud)

有多种方法可以格式化代码,使其更容易消化.在这一点上,我们可以通过逻辑:

如果minSupport是真的:

检查是否minSupport为零(字面上不可能发生,因为0不是真的).如果是(它不能)设置this.minSupport0.否则,设置this.minSupportminSupport包含的任何值.

否则如果minSupport是假的:

设置this.minSupport0.15

因此,在消化了这个逻辑的情况下,很明显有一个二次检查意图保留其价值0.代码是错误的,修复是改变逻辑:

this.minSupport =
  minSupport
    ? minSupport
    : minSupport === 0
      ? minSupport
      : 0.15;
Run Code Online (Sandbox Code Playgroud)

现在通过该重排,我们可以查看逻辑并看到它可以被压缩.我们要设置this.minSupportminSupport如果minSupport是truthy 或者如果minSupport0.

简化如下:

this.minSupport =
  minSupport || minSupport === 0
    ? minSupport
    : 0.15;
Run Code Online (Sandbox Code Playgroud)