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

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

有没有像三元运算符那样,一条语句就搞定的?
10493 次点击
所在节点    PHP
73 条回复
155
2015-03-20 11:53:15 +08:00
$method = $is_false ? 'rollback' : 'commit';

$this->$method();
jon
2015-03-20 12:01:41 +08:00
@griffinqiu 这个改进不错,保证条件为真时,不会执行else部分代码

不过一般还是用ifelse这种可读性好点的
shyangs
2015-03-20 12:04:52 +08:00
@griffinqiu
難看←_←
Felldeadbird
2015-03-20 12:30:25 +08:00
最讨厌这种不加 括号的语句了。调试不好调。看着也不爽。
ETiV
2015-03-20 13:01:00 +08:00
@b821025551b 你没考虑优先级的问题

把括号加进去, 像这样: (xx && yy) || zz

你是不是能看明白点?
fr0m
2015-03-20 13:16:59 +08:00
@griffinqiu readability diaobaole
b821025551b
2015-03-20 13:24:33 +08:00
@ETiV xx为真,yy为假,括号里为假,会执行zz,这样会导致yy和zz都被执行 :)@griffinqiu 在39楼的改进版才是正确的
ETiV
2015-03-20 13:28:36 +08:00
@b821025551b

好吧, 我懂了. 咱俩说岔了!!!
chmlai
2015-03-20 14:37:30 +08:00
不用改!
charle9
2015-03-20 15:08:19 +08:00
@mcfog +1
ioth
2015-03-20 15:10:22 +08:00
php也想优雅?
py笑了。
php就比c难看那么一点,当年才愿意用pascal不用c
c就是合适懒人。
recall704
2015-03-20 15:11:04 +08:00
do_rollback() if is_false else do_commit()

python 的写法
loryyang
2015-03-20 17:28:25 +08:00
优雅不是说代码量少,而是容易看懂,层次结构合理清洗,所以不仅要这么写,而且要加上大括号。
fxxkgw
2015-03-20 18:10:11 +08:00
$this->rollbakc() if($is_false) else $this->commit()
python
tinkerer
2015-03-20 21:18:53 +08:00
@ALeo 含泪握爪。
popoge
2015-03-20 21:24:00 +08:00
@ALeo 请假这种写法效率高在哪里呢?
jasontse
2015-03-20 21:27:15 +08:00
标题应该改成
这种一句话的 if, else 有没有难以阅读的处理方法?
shiny
2015-03-20 21:31:16 +08:00
这个时候总是能想起一个成语:大巧若拙
ALeo
2015-03-20 22:09:30 +08:00
@popoge 去测试一下 if else 和三元运算的执行时间就知道了。
rming
2015-03-20 22:17:47 +08:00
$method = $is_false ? "rollback" : "commit" ;
call_user_func([$this, $method]);

这样的写法,其实一开始我是拒绝的。。。

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

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

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

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

© 2021 V2EX