【问题标题】:What's the equivalent if/else statement for this multiply nested ternary expression?这个多重嵌套三元表达式的等效 if/else 语句是什么?
【发布时间】:2015-06-02 04:24:53
【问题描述】:

我在 Notepad++ 中重构了一段代码,并在 parameters.cpp 中遇到了这个

if/else 语句的等效系列是什么?

【问题讨论】:

  • 你能把代码贴在这里而不是截图吗?
  • 我看不出是哪一部分让您感到困惑。或者,您只是在问(booleanExpression1) ? value1 : (booleanExpression2) ? value2 : value3 是什么意思?

标签: c++ if-statement ternary-operator


【解决方案1】:

对于嵌套三元表达式,我建议 switch/case 语句比 if/else 更有效。

【讨论】:

    【解决方案2】:

    这似乎更像是一个打字挑战而不是一个实际的问题......

    const TCHAR *pFolderStyleStr;
    
    if ( svp._folderStyle == FOLDER_STYLE_SIMPLE )
        pFolderStyleStr = TEXT("simple");
    else if ( svp._folderStyle == FOLDER_STYLE_ARROW )
        pFolderStyleStr = TEXT("arrow");
    // (same for circle and none)
    else 
        pFolderStyleStr = TEXT("box");
    

    switch 会比if..else 更好,但是我认为没有理由更改原始代码。 “重构”并不意味着“为了它而重写”。

    如果你真的想重构,那么我的建议是:

    const TCHAR *pFolderStyleStr = folder_style_string(svp._folderStyle);
    

    并添加一个函数:

    const TCHAR *folder_style_string(WHATEVER_TYPE style)
    {
         switch(style)
         {
         case FOLDER_STYLE_SIMPLE: return TEXT("simple");
         // ...
         default: return TEXT("box");
         }
    }
    

    【讨论】:

    • +1。回复:“'重构'并不意味着'为了它而重写'”:如果有更多的人同意你的话。 . .
    【解决方案3】:

    相当于这样:

    if(folder_style == SIMPLE)
        text = "simple"
    else if(folder_style == ARROW)
        text = "arrow"
    //...more statements
    else
        text = "box"
    

    【讨论】:

      猜你喜欢
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多