例如,当我在代码上运行ReSharper时:
if (some condition) { Some code... }
ReSharper给了我以上警告(反转“ if”语句以减少嵌套),并建议进行以下更正:
if (!some condition) return; Some code...
我想了解为什么会更好。我一直以为在方法中间使用“返回”是有问题的,有点像“转到”。
方法中间的返回不一定不好。如果它使代码的意图更加清晰,最好立即返回。例如:
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,我们可以立即退出该方法。最好这样构造它:
_isDead
double getPayAmount() { if (_isDead) return deadAmount(); if (_isSeparated) return separatedAmount(); if (_isRetired) return retiredAmount(); return normalPayAmount(); };
我已经从重构目录中选择了此代码。这种特定的重构称为:用Guard子句替换嵌套条件。