关于布尔值的If和If /else

if versus if/else with regard to boolean

本文关键字:If else 于布尔      更新时间:2023-10-16

以下哪一种实现是最好的,为什么?

bool MyClass::hasCContainerValues(CContainer* container)
{
    if(container && container->nrOfValues>0) 
    {
        return true;
    }
    return false;
}
bool MyClass::hasCContainerValues(CContainer* container)
{
    if(container && container->nrOfValues>0) 
    {
        return true;
    }
    else 
    {
        return false;
    }
}

假设您只做了一个简单的测试,那么使用:

bool MyClass::hasCContainerValues(CContainer* container) const
{
    return (container && container->nrOfValues>0);
}

然而,如果您要做更多,那么有时认为单个出口点更好(各种静态分析规则集抱怨多个出口点,正确或错误):

bool MyClass::hasCContainerValues(CContainer* container) const
{
    bool retval = false;
    if(container && container->nrOfValues>0) 
    {
        // something else here perhaps
        retval = true;
    }
    return retval;
}

此外,作为题外话,如果您只测试内容,那么您可能会使方法const,但这与您的问题无关。

假设这是一个例子,你不想只做return (container && container->nrOfValues>0),它们都是OK的,同样正确。

剩下的只是个人意见/品味,这会在这里引发一场宗教战争。我个人更喜欢第一种,但可能会根据两个子句的复杂性选择,即truefalse路径中的逻辑。

没关系…如果您使用现代编译器,它将优化和转换您的代码。你的两个片段可以产生完全相同的代码。

嗯,较短的代码形式不会影响代码的可读性,所以最好使用较短的形式,也就是第一个。因为它是可读的,它有更少的代码行。