从布尔方法返回的公认惯例是什么

时间:2011-08-03 13:46:13

标签: methods boolean

好的,这是一个简单的问题,但我想对这里的正确做法有一些看法。我并不是在考虑性能问题,因为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来进行不必要的赋值。

3 个答案:

答案 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);
}