一尘不染

反转“ if”语句以减少嵌套

c#

例如,当我在代码上运行ReSharper时:

    if (some condition)
    {
        Some code...            
    }

ReSharper给了我以上警告(反转“ if”语句以减少嵌套),并建议进行以下更正:

   if (!some condition) return;
   Some code...

我想了解为什么会更好。我一直以为在方法中间使用“返回”是有问题的,有点像“转到”。


阅读 313

收藏
2020-05-19

共1个答案

一尘不染

方法中间的返回不一定不好。如果它使代码的意图更加清晰,最好立即返回。例如:

double getPayAmount() {
    double result;
    if (_isDead) result = deadAmount();
    else {
        if (_isSeparated) result = separatedAmount();
        else {
            if (_isRetired) result = retiredAmount();
            else result = normalPayAmount();
        };
    }
     return result;
};

在这种情况下,如果_isDead为true,我们可以立即退出该方法。最好这样构造它:

double getPayAmount() {
    if (_isDead)      return deadAmount();
    if (_isSeparated) return separatedAmount();
    if (_isRetired)   return retiredAmount();

    return normalPayAmount();
};

我已经从重构目录中选择了此代码。这种特定的重构称为:用Guard子句替换嵌套条件。

2020-05-19