在条件语句中执行函数被认为是不好的形式吗?

Mic*_*oka 7 language-agnostic if-statement

考虑一种情况,你需要调用连续的例程,并在返回一个可以被评估为正值的值时停止(true,object,1,str(1)).

这样做非常诱人:

if (fruit = getOrange())
elseif (fruit = getApple())
elseif (fruit = getMango())
else fruit = new Banana();

return fruit;
Run Code Online (Sandbox Code Playgroud)

我喜欢它,但这不是一个非常经常的风格,可以被认为是专业的生产代码.人们可能更愿意看到更精细的代码,如:

fruit = getOrange();
if(!fruit){
    fruit = getApple();
    if(!fruit){
        fruit = getMango();
        if(!fruit){
            fruit = new Banana();
        }
    }
}

return fruit;
Run Code Online (Sandbox Code Playgroud)

根据基本结构的教条,以前的形式是否可以接受?你会推荐吗?

编辑:

我向那些认为这些功能是工厂或建造者的人道歉.他们不是,他们只是占位符.问题更多的是语法而不是"工厂化".这些功能也可以是lambda.

Jim*_*mmy 9

如果你想要一个简洁的语法,几种语言允许使用"逻辑或"为此目的(C#显式提供了一个合并运算符,因为空值不是假的).

蟒蛇:

fruit = ( getOrange() or 
          getApple()  or 
          getMango()  or 
          Banana() )
Run Code Online (Sandbox Code Playgroud)

C#:

fruit = getOrange() ?? 
        getApple()  ?? 
        getMango()  ?? 
        new Banana();
Run Code Online (Sandbox Code Playgroud)