试图确定哪种方法是执行顺序方法的最佳实践。在主函数中,一个接一个地嵌套条件,或者另一个在内部嵌套条件。此外,如果您可以提供“为什么”一种方法,除了最可以接受的方法之外,还要优于另一种方法,我对此表示衷心的感谢。这是我的示例:
一个接一个地嵌套
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;
}
但是,我都看过两者,但不确定哪种做法更好和/或更普遍。
[这两个选项实际上在逻辑上并不完全相同-例如,在“嵌套中接一个”中,即使method_two()
失败,method_one()
也会运行;如果method_two()
有任何副作用,则可能是不可取的。此外,如果method_one()
和method_two()
都注定要失败,则“依次嵌套”将打印两个错误提示,而“将一个嵌套在另一个内部”将仅在method_one()
上显示错误提示。
您可以通过在“依次嵌套”中的每个goto End
的末尾附加一个else
来缩小差异,因此它跳过了其余的检查,但是使用goto
可能会打败您。另外,您也可以在return
的末尾加上一个错误代码,让调用main
函数的任何人都可以理解发生了什么问题。
考虑到这一点,“缩进嵌套”可能更易于阅读和理解,因为缩进更少/代码保持平坦,并且在检查之后立即出现故障。 (第二点可以通过将method_one()
的错误提示重新排序为在检查method_two()
的“嵌套另一个内部”之前的顺序来解决)