javascript - 理解嵌套三元运算符的简单方法?

标签 javascript ternary-operator ternary-tree

是否有一个简单的启发式方法来理解如何阅读嵌套的三元运算符? 我在某人的源代码中遇到过这个,但无法理解。一个简单的三元组很容易:

isRed = color == 'red' ? true : false

但是您如何阅读以下内容?我可以将第一个与最后一个对齐,第二个与倒数第二个对齐,还是我必须将其解析为我脑海中的 if/else 树?

var offset =
  ( hasFrozenRows )
    ? ( options.frozenBottom )
    ? ( row >= actualFrozenRow )
    ? ( h < viewportTopH )
    ? ( actualFrozenRow * options.rowHeight )
    : h
    : 0
    : ( row >= actualFrozenRow )
    ? frozenRowsHeight
    : 0
    : 0;

重新制表后,它可以变成这样,这几乎可以理解(?)

      var offset =
        ( hasFrozenRows ) ?
          ( options frozenBottom ) ?
            ( row >= actualFrozenRow ) ?
              ( h < viewportTopH ) ?
                ( actualFrozenRow * options.rowHeight )
                :
                h
              :
              0
            :
            ( row >= actualFrozenRow ) ?
              frozenRowsHeight
              :
              0
            :
            0;

最佳答案

我认为如果您尝试将其阅读为一系列check thisif true then thiselse that

为此,将 ?: 运算符放在行的开头可能更容易,并像阅读流程图上的箭头一样阅读它们,标记为"is"和“否”。例如:

cond1 
  ? cond2 
    ? cond3 
      ? res1 
      : res2
    : res3
  : res4

可以理解为:

cond1?
  yes -> is cond2 
    yes -> is cond3?
      yes -> res1 
      no -> res2
    no -> res3
  no -> res4

这仍然不能使它具有很好的可读性,我同意所有评论说这种代码真的应该被重写以提高可读性。

关于javascript - 理解嵌套三元运算符的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22997226/

相关文章:

java - 三叉树的前序遍历

javascript - DataTables 在 columnDefs 完好无损的情况下启动多个子表

java - foreach 语法中的三元运算符

c# - 带后缀增量的三元运算符赋值

c++ - 三元树报错

python - 使用常数空间迭代所有互质对?

javascript - Pusher.subscribe() 不是服务器端的函数?

javascript - 无法使用 Kraken 的公共(public) Websocket API 建立握手

javascript - 更改区域悬停时的 img src

Python语法: unpacking multiple variables from function return value in ternary expression gives unexpected result