哪一个更好(通过返回隐藏控制流或通过返回控制流) - 见下文。请解释一下你认为哪个是优点/缺点。我喜欢选项A,因为它的代码更少。
public ActionResult Edit(MyClass class)
{
if (!class.Editable)
return null;
class.Update();
return View();
}
public ActionResult Edit(MyClass class)
{
if (class.Editable)
{
class.Update();
return View();
}
else
{
return null;
}
}
答案 0 :(得分:26)
这个具体的例子没什么区别,但总的来说我喜欢第一种方法,因为它使用guard clause提前返回。如果您开始向第二种方法添加嵌套条件,您将看到您的代码可读性会受到影响。 Guard子句可以大大减少嵌套深度,并且真正提高代码的可读性。
答案 1 :(得分:10)
我个人喜欢if/else
方法。例如,您的if
陈述是积极的,而不是消极的,使其更容易阅读。对于两个人,你已经用大括号括起条件,而且我是那种风格的粉丝。
无论如何,跟在第二场比第一场比赛更容易。这总是在我的书中获胜。
答案 2 :(得分:6)
为了可读性和可维护性,我更喜欢第二种方法。可读性,因为它比第一种方法对我来说更“清洁”,并且可维护性,因为如果我需要修改if或else子句,我不必担心添加花括号。此外,如果不包括新行,第一种方法只比第二种方法少7个字符,这似乎不太适合选择第一种方法。
那就是说,我其实更喜欢这个:
public ActionResult Edit(MyClass class)
{
ActionResult rv = null;
if (class.Editable)
{
class.Update();
rv = View();
}
return rv;
}
这是更多的代码,但我现在可以在return语句上设置一个断点来检查返回的值,而不是必须设置两个断点来在你提供的两个选项中执行相同的操作。
答案 3 :(得分:3)
这两个语句都通过if
语句来控制流量。这只是你如何处理这种情况的问题。
在编写像这样的逻辑语句时,我总是处于困境之中。我的一部分喜欢第一个选项,因为它的代码少了一点。我的另一部分喜欢第二种选择,因为它更容易遵循逻辑流程。使用第一个选项时,很容易错过返回语句,这可能导致将来出现可管理性问题。
...因此,第二个选项总是在我的书中获胜。编写比尝试使用快捷方式更容易阅读和维护的代码更好。
答案 4 :(得分:2)
我更希望我认为是那个执行较少代码的人 如果它更常见于class.Editable是假的那么我会去A.
但是这个例子在任何一种情况下都没有太大的优势。
在任何给定的情况下,开发人员应分析输入并调整要在最常见的输入数据上优化的代码。
修改强>
澄清:
通过执行更少的代码我实际意味着最有效...
答案 5 :(得分:2)
提前退出 - 我更愿意看到导致该方法退出的所有条件,而不需要预先做很多事情。如果我完全可以避免,我会避免其他陈述。
这实际上是代码合约人群中一个相当突出的思想流派。
答案 6 :(得分:1)
在这种情况下,我会使用选项A.在这种情况下,您正在进行输入验证,然后在输入无效(不可编辑)时阻止执行其余代码。这使得函数的整个主体不受大if / else语句的影响,并使其更具可读性。
但是,我也会考虑提出异常而不是重新调整null - 假设将不可编辑的对象传入“编辑”函数并不是正常现象。
答案 7 :(得分:1)
它们都是有效的选择,一个不一定比另一个好。你选择哪一个最终是个人偏好。是的,选项A导致略微更少的代码,但总体来说它们非常相等。
在这两种情况下,您都通过if和return来控制流量。这真的是一个问题,你更喜欢看你的布尔逻辑 - 消极还是积极?
ActionResult
是枚举还是基类?如果它是枚举,当null
返回看似枚举的内容时,为什么要返回Edit
?仅仅返回一个ActionResult
值表示没有采取任何操作,因为该对象不处于可编辑状态会不会更清晰?
答案 8 :(得分:1)
使用return的第一个选项更好,因为:
此方法的一个支持者(返回)是Marcus Zarra
中的Cocoa is my Girlfriend coding style答案 9 :(得分:0)
我更喜欢第一个选项,前提是您检查的情况是方法调用有效时需要满足的保护/前提条件。虽然您可以争辩是否应该返回null,或者抛出(Argument)异常。当一个类不可编辑时,它真的应该是这个方法的参数吗?
也许更好的选择是创建一个IEditable接口,并在你正在传递一个实例的类上实现它。
答案 10 :(得分:0)
我也喜欢if/else
。对我来说,易读性,可读性和可维护性是最重要的。
答案 11 :(得分:-1)
我也更喜欢选项1.对我而言,它更像是一本书。此外,我总是对选项2结尾没有回报感到痛心。