这种一句话的 if, else 有没有优雅的处理方法?

2015-03-20 09:57:11 +08:00
 blue7wings
if ($is_false)
$this->rollback();
else
$this->commit();

有没有像三元运算符那样,一条语句就搞定的?
10327 次点击
所在节点    PHP
73 条回复
XCaiEr
2015-03-20 10:31:20 +08:00
Bool ? A : B;
finian
2015-03-20 10:31:49 +08:00
killerand1983
2015-03-20 10:34:07 +08:00
搭车:
为什么 $is_false ? echo 111 : echo 222; 不行
$is_false ? print 111 : print 222; 就可以
sudoz
2015-03-20 10:36:31 +08:00
? : 三目运算 一行搞定啊
ALeo
2015-03-20 10:43:21 +08:00
@killerand1983 echo不能使用在表达式里面..它算不上是一个函数
SuujonH
2015-03-20 10:48:47 +08:00
@Arrowing 似乎不会吧,记得&& 是符合了第一个条件才会判定后面的
ericls
2015-03-20 10:49:37 +08:00
我觉得楼主的就挺优雅的 比楼下的一行的好
b821025551b
2015-03-20 10:50:13 +08:00
@killerand1983 用 echo $is_false ? 111 : 222;echo只是个语言结构,而print是个有返回值的函数
aWangami
2015-03-20 10:51:06 +08:00
问号表达式
goodbest
2015-03-20 10:51:31 +08:00
碰到按代码行数算工作量的公司,你们就老老实实写lz的吧...
blue7wings
2015-03-20 10:52:57 +08:00
感谢以上的同学的解答。。。
haiyang416
2015-03-20 10:56:41 +08:00
@b821025551b 不要误导别人,print 是语言结构。
blue7wings
2015-03-20 10:59:55 +08:00
我还是决定使用if,else。不必太过于强求简洁,可读性也是非常重要的。。。
c742435
2015-03-20 11:00:30 +08:00
我一般只是用&& 确保值存在。
比如
callback && callback();
其他的用法,过于依赖&& 和|| 当流程跳转,会降低代码可读性。
k9982874
2015-03-20 11:02:08 +08:00
@ALeo +1 不加花括号不能忍

@griffinqiu 虽然实现优美简洁但是不适合在多人项目中使用。满篇这种写法其他维护和检查的同事会想死。

@blue7wings 综上ifelse还是最优雅的
b821025551b
2015-03-20 11:06:10 +08:00
@griffinqiu
@killerand1983
@ETiV

这个写法绝对有问题啊,你们自己看看
function A(){
echo 'A';
return true;
}
function B(){
echo 'B';
}
true && A() || B();

//结果:A

function A(){
echo 'A';
return false;
}
function B(){
echo 'B';
}
true && A() || B();

//结果 AB

function A(){
echo 'A';
return true;
}
function B(){
echo 'B';
}
false && A() || B();
//结果B
hooluupog
2015-03-20 11:08:49 +08:00
要么使用Fp语言,要么就忍受大量的if else。三目运算符用多了也出问题,比如多层的嵌套。
if else {} ; 这些看起来像是噪音,不过可读性还是不错的。
b821025551b
2015-03-20 11:09:42 +08:00
@haiyang416 对,我错了,print是语言结构,但是它有返回值,所以能在三元里执行
griffinqiu
2015-03-20 11:30:00 +08:00
@b821025551b 咳咳,本着对科学的严谨性。本PHPer决定修改该写发。
$is_false && ($this->rollback() || true) || $this->commit();
Registering
2015-03-20 11:47:36 +08:00
clean code 中建议拆成两个方法,,,忘记了是不是,,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/178153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX