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.
如果你想要一个简洁的语法,几种语言允许使用"逻辑或"为此目的(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)