Methods 从布尔方法返回的公认实践是什么

Methods 从布尔方法返回的公认实践是什么,methods,boolean,Methods,Boolean,好的,这是一个简单的问题,但我想就正确的做法提出一些建议。我不是为了性能考虑,因为CPU的功能非常强大,除非在没有数千次迭代的循环构造的情况下调用,否则不会产生任何明显的差异。我只是想了解一下什么是公认的标准 我有一个方法,基本上只是做一个检查,返回一个布尔值。然而,有许多方法可以实现这一点 public bool CanUndo() { if (_nCurrentUndoIndex > 0) return true;

好的,这是一个简单的问题,但我想就正确的做法提出一些建议。我不是为了性能考虑,因为CPU的功能非常强大,除非在没有数千次迭代的循环构造的情况下调用,否则不会产生任何明显的差异。我只是想了解一下什么是公认的标准

我有一个方法,基本上只是做一个检查,返回一个布尔值。然而,有许多方法可以实现这一点

    public bool CanUndo()
    {
        if (_nCurrentUndoIndex > 0)
            return true;
        else
            return false;
    }
以下是我通常如何实现这一点

    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来进行不必要的赋值

public bool CanUndo () {
    return _nCurrentUndoIndex > 0;
}
就我个人而言,从一个方法中间返回并没有问题。但在RAII的帮助下,争论消失了

我宁愿在合适的时候尽快离开,否则你会

if (x) {
   if (y) {
       if (z) {
          complete
       }
   }
}
而不是

if (!x)
    return

if (!y)
    return

if (!z)
    return

complete
这样可以避免嵌套、宽行(水平屏幕空间很昂贵,垂直空间很便宜),并且您始终知道,如果您仍在函数中,那么您就不会处于错误路径中。适用于此设计的代码也适用于例外情况,这一点非常重要

public bool CanUndo()
{
   return (_nCurrentUndoIndex > 0);
}
就我个人而言,从一个方法中间返回并没有问题。但在RAII的帮助下,争论消失了

我宁愿在合适的时候尽快离开,否则你会

if (x) {
   if (y) {
       if (z) {
          complete
       }
   }
}
而不是

if (!x)
    return

if (!y)
    return

if (!z)
    return

complete

这样可以避免嵌套、宽行(水平屏幕空间很昂贵,垂直空间很便宜),并且您始终知道,如果您仍在函数中,那么您就不会处于错误路径中。适用于这种设计的代码也适用于例外情况,这一点非常重要。

您应该始终将布尔值返回压缩为其逻辑等价值,因为这对开发人员来说更容易阅读,为您编写的速度更快,并且无论如何都会被编译器压缩

public bool CanUndo()
{
   return (_nCurrentUndoIndex > 0);
}
考虑扩展的

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)

您应该始终将布尔返回压缩为它们的逻辑等价物,因为这对开发人员来说更容易阅读,为您编写的速度更快,而且编译器也会对其进行压缩

考虑扩展的

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)

是的,我忘记了,我们可以把它实现为一个内联函数,在头文件中实现,回到我的C++天。也许我选择了一个简单的场景。如果条件比simply>比较更复杂,并且不能在一行中实现它并保持可读性,您会选择三个选项中的哪一个。如果不需要添加清理代码,我会选择多返回路线。如果您必须为额外的分支复制清理代码,那么这将成为一个品味问题。对于小函数来说,对于大的函数并不重要,将它们重构成较小的函数。是的,我忘记了在基线时,在C++文件中实现的替代函数,基本上,我们将实现为内联函数。也许我选择了太简单的场景。如果条件比simply>比较更复杂,并且不能在一行中实现它并保持可读性,您会选择三个选项中的哪一个。如果不需要添加清理代码,我会选择多返回路线。如果您必须为额外的分支复制清理代码,那么这将成为一个品味问题。对于小功能来说这并不重要,对于大功能来说,把它们重构成小功能。你担心的是一个无关紧要的细节。编译器可能会优化掉大部分差异,即使没有,你也不会注意到差异,除非你谈论的是上亿次(而不是数千次)的循环。你担心的是一个无关紧要的细节。编译器可能会优化掉大部分差异,即使没有,也不太可能注意到差异,除非您正在谈论的是100万(而不是数千)的循环。