【问题标题】:What is the accepted formatting for nested ternary-operators?嵌套三元运算符可接受的格式是什么?
【发布时间】:2016-06-03 03:49:27
【问题描述】:

假设我们有嵌套的三元语句:

return foo ? 1 : bar ? 2 : 3;

格式化此代码以确保其他人未来可读性的最佳方式是什么。

【问题讨论】:

  • 不要那样做。嵌套三元语句严重影响可读性。
  • 请阅读thiscodereview 帖子。
  • 这看起来是基于意见,没有“正确”答案,或者是根据具体情况做出的最佳决定(我的意见)。 @ariberiro 提供的 codereview 链接进一步讨论了该主题。

标签: javascript formatting ternary-operator


【解决方案1】:
return foo ? 1 : (bar ? 2 : 3) ;

【讨论】:

    【解决方案2】:

    为了可读性,请远离这些语句,它们很容易被误读,如果您想要更具可读性的内容,只需扩展并使用普通语句..

    只有一个嵌套的 if 语句列表没有错..

    if(foo){
       return 1
    }else{
      if(bar){
          return 2;
      }else{
          return 3;
      }
    }
    

    【讨论】:

      【解决方案3】:

      分离功能

      function getValue(cond1, cond2) {
        if(cond1) return 'a';
        if(cond2) return 'b';
        return 'c';
      }
      
      function work() {
        const result = getValue(/* some params */);
      }
      

      【讨论】:

        【解决方案4】:

        This post 是我能找到的最流行的观点。那里的建议是

        return foo ? 1 :
               bar ? 2 : 
                     3 ;
        

        【讨论】:

          【解决方案5】:

          我不知道这是否被接受,但我一直都这样使用它。

          Ternary 为您提供了如此自然的测试结构,您只需将代码设置为多行并正确缩进即可使代码非常易读。我坚信以下三元的用法是嵌套条件的最佳体现。

          return foo ? 1 
                     : bar ? 2
                           : 3;
          

          在更复杂的情况下,您可以让三元运算符和逗号运算符完美地协同工作。请记住,逗号分隔组中的最后一条指令会自动返回。三元组超级好用。

          return foo ? ( doSometingFoo()
                       , variable++
                       , collectResult()               // and return foo result
                       )
                     : bar ? ( doSomethingBar()
                             , variable--
                             , collectAnotherResult()  // and return bar result
                             )
                           : ( doSomethingReject()
                             , variable = 0
                             , rejectSomehow()         // and return error code
                             )
          

          【讨论】:

          • 这种方法适用于三个级别,但由于缩进过多,当您的腿超过三个时很快就会崩溃。像这个答案一样排列更适合处理任意数量的腿:stackoverflow.com/a/44724098
          【解决方案6】:

          我偏爱这种三元运算符格式的可读性:

          return foo
              ? bar
              : baz
                ? qux
                : qiz
                  ? 1
                  : 2;
          

          【讨论】:

            猜你喜欢
            • 2011-10-29
            • 1970-01-01
            • 1970-01-01
            • 2021-10-03
            • 2020-10-06
            • 2014-10-02
            • 1970-01-01
            相关资源
            最近更新 更多