好的,这是一个简单的问题,但我想对这里的正确做法有一些看法。我并不是在考虑性能问题,因为CPU非常强大,除非在没有数千次迭代的循环结构的情况下调用,否则不会产生任何可察觉的差异。我只是希望看到什么是可接受的标准。
我有一个方法,基本上只是检查返回一个布尔值。但是,有很多方法可以实现这一点。
以下是我通常会如何实现这一点。
public bool CanUndo()
{
if (_nCurrentUndoIndex > 0)
return true;
else
return false;
}
然而,从方法的中间返回往往不赞成。我通常这样做的唯一一次是对这样的表单提交进行检查。
if (String.IsNullOrEmpty(firstName.Text))
{
MessageBox.Show("Please enter a first name", "Incomplete");
return;
}
我认为这是可以接受的。
回到撤消问题,另一种编码方式就是这样。
public bool CanUndo()
{
bool returnVal;
if (_nCurrentUndoIndex > 0)
returnVal = true;
else
returnVal = false;
return returnVal;
}
然而,这不知不觉地分配变量并且是更详细的代码。另一种选择是。
public bool CanUndo()
{
bool returnVal = false;
if (_nCurrentUndoIndex > 0)
returnVal = true;
return returnVal;
}
这更加精简,因为它摆脱了其他。但是,如果值为true,则通过将其初始化为false来进行不必要的赋值。
答案 0 :(得分:2)
public bool CanUndo () {
return _nCurrentUndoIndex > 0;
}
就个人而言,从方法中间返回没有问题。它complicates cleanup code for C functions但是RAII的论点消失了。
我希望尽快退出,否则你会得到
if (x) {
if (y) {
if (z) {
complete
}
}
}
而不是
if (!x)
return
if (!y)
return
if (!z)
return
complete
这样你就可以避免嵌套,宽线条(水平屏幕空间很贵,垂直空间很便宜)而且你总是知道如果你还在一个函数中,那么你就不会在错误路径中。适用于此设计的代码也适用于异常,这非常重要。
答案 1 :(得分:1)
你应该总是将布尔返回收缩到它们的逻辑容量,因为这对于开发人员来说更容易阅读,为你编写它会更快,并且它会被编译器收缩。
考虑展开or
:
if (a == 1)
return true;
else if (a == 2)
return true;
else if (a == 3)
return true;
else
return false;
当您将其与合同规定的版本进行比较时,原因应该变得明显
return (a == 1) || (a == 2) || (a == 3)
答案 2 :(得分:0)
public bool CanUndo()
{
return (_nCurrentUndoIndex > 0);
}