将条件句嵌套在Main内部,或不将条件句嵌套在嵌套中

问题描述 投票:0回答:1

问题

试图确定哪种方法是执行顺序方法的最佳实践。在主函数中,一个接一个地嵌套条件,或者另一个在内部嵌套条件。此外,如果您可以提供“为什么”一种方法,除了最可以接受的方法之外,还要优于另一种方法,我对此表示衷心的感谢。这是我的示例:

一个接一个地嵌套

int main()
{
    // conditional 1
    if (!method_one())
    {
       ... do something
    } 
    else 
    {
       ... prompt error for method 1!
    }

    // conditional 2
    if (!method_two())
    {
       ... do something
    } 
    else 
    {
       ... prompt error for method 2!
    }

    // conditional 3
    if (!method_three())
    {
       ... do something
    } 
    else 
    {
       ... prompt error for method 3!
    }

    return 0;
}

将一个嵌套在另一个内部

int main()
{
    // conditional 1
    if (!method_one())
    {
       if (!method_two())
       {
          if (!method_three())
          {
              ... next steps in sequence
          } 
          else 
          {
             ... prompt error for method 3!
          }
          ... prompt error for method 2!
       }
       ... prompt error for method 1!
    }

    return 0;
}

观察

但是,我都看过两者,但不确定哪种做法更好和/或更普遍。

structure methodology
1个回答
0
投票

[这两个选项实际上在逻辑上并不完全相同-例如,在“嵌套中接一个”中,即使method_two()失败,method_one()也会运行;如果method_two()有任何副作用,则可能是不可取的。此外,如果method_one()method_two()都注定要失败,则“依次嵌套”将打印两个错误提示,而“将一个嵌套在另一个内部”将仅在method_one()上显示错误提示。

您可以通过在“依次嵌套”中的每个goto End的末尾附加一个else来缩小差异,因此它跳过了其余的检查,但是使用goto可能会打败您。另外,您也可以在return的末尾加上一个错误代码,让调用main函数的任何人都可以理解发生了什么问题。

考虑到这一点,“缩进嵌套”可能更易于阅读和理解,因为缩进更少/代码保持平坦,并且在检查之后立即出现故障。 (第二点可以通过将method_one()的错误提示重新排序为在检查method_two()的“嵌套另一个内部”之前的顺序来解决)

© www.soinside.com 2019 - 2024. All rights reserved.