if ($is_false)
$this->rollback();
else
$this->commit();
有没有像三元运算符那样,一条语句就搞定的?
$this->rollback();
else
$this->commit();
有没有像三元运算符那样,一条语句就搞定的?
|
1
Readability counts.
|
|
b821025551bMar 20, 2015
2
直接三元就行了
|
|
lizhemingMar 20, 2015
3
额,这个不可以写成三元么?
|
|
xjliaoMar 20, 2015
4
同意3楼
|
|
5
$is_false && $this->rollback() || $this->commit();
PHP是世界上最好的语言没有之一。 |
|
killerand1983Mar 20, 2015
6
echo $is_false ? $this->rollback() : $this->commit()
|
|
7
用if else 就好了,好像效率还更高一点..
顺便说一句,我真的看不惯别人写这种语句不加花括号... |
|
8
这种情况就应该写多行没事把几句话硬挤在一起写就好像说话不停顿写字不加标点不仅不优雅简直就是在讨打
|
|
killerand1983Mar 20, 2015
9
@griffinqiu 这个是什么语法呢?求解
|
|
b821025551bMar 20, 2015
10
@griffinqiu 你这是什么???
|
|
zhichengMar 20, 2015 via Android
11
难道,大家都没有听说过函数这个东西吗?
|
|
lyragosaMar 20, 2015
12
@griffinqiu 窝巢,这个神了……
|
|
br00kMar 20, 2015
13
@griffinqiu 这样是错的。第一个为false,后面2个都不会执行。用三元没问题。
|
|
haiyang416Mar 20, 2015
14
@killerand1983 不要用 @griffinqiu 的写法。
|
|
ArrowingMar 20, 2015
15
@griffinqiu 你这个是错的,如果$is_false为true的话,2个方法都会执行到。
|
|
kmvanMar 20, 2015
16
wp源码,经常有
if(true) return; |
|
ETiVMar 20, 2015 via iPhone
18
三元:
TrueOrFalse ? ExecTrue : ExecFalse 某楼那个是(几乎?)所有高级点儿的编程语言的特性 && 左边是 false 的时候直接返回 false,不执行右边的 || 相反,左边是 true 的时候直接返回 true,不执行右边的 |
|
killerand1983Mar 20, 2015
19
@griffinqiu 研究了十分钟终于懂了
(a && b ) || c |
|
killerand1983Mar 20, 2015
20
@griffinqiu 研究了十分钟终于懂了
((a) && (b) ) || c |
|
XCaiErMar 20, 2015 via iPhone
21
Bool ? A : B;
|
|
killerand1983Mar 20, 2015
23
搭车:
为什么 $is_false ? echo 111 : echo 222; 不行 $is_false ? print 111 : print 222; 就可以 |
|
sudozMar 20, 2015
24
? : 三目运算 一行搞定啊
|
|
25
@killerand1983 echo不能使用在表达式里面..它算不上是一个函数
|
|
ericlsMar 20, 2015
27
我觉得楼主的就挺优雅的 比楼下的一行的好
|
|
28
@killerand1983 用 echo $is_false ? 111 : 222;echo只是个语言结构,而print是个有返回值的函数
|
|
aWangamiMar 20, 2015
29
问号表达式
|
|
goodbestMar 20, 2015
30
碰到按代码行数算工作量的公司,你们就老老实实写lz的吧...
|
|
31
感谢以上的同学的解答。。。
|
|
haiyang416Mar 20, 2015
32
@b821025551b 不要误导别人,print 是语言结构。
|
|
33
我还是决定使用if,else。不必太过于强求简洁,可读性也是非常重要的。。。
|
|
c742435Mar 20, 2015
34
我一般只是用&& 确保值存在。
比如 callback && callback(); 其他的用法,过于依赖&& 和|| 当流程跳转,会降低代码可读性。 |
|
k9982874Mar 20, 2015 via iPad
35
|
|
b821025551bMar 20, 2015
36
@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 |
|
hooluupogMar 20, 2015
37
要么使用Fp语言,要么就忍受大量的if else。三目运算符用多了也出问题,比如多层的嵌套。
if else {} ; 这些看起来像是噪音,不过可读性还是不错的。 |
|
b821025551bMar 20, 2015
38
@haiyang416 对,我错了,print是语言结构,但是它有返回值,所以能在三元里执行
|
|
griffinqiuMar 20, 2015
39
@b821025551b 咳咳,本着对科学的严谨性。本PHPer决定修改该写发。
$is_false && ($this->rollback() || true) || $this->commit(); |
|
RegisteringMar 20, 2015
40
clean code 中建议拆成两个方法,,,忘记了是不是,,
|
|
155Mar 20, 2015
41
$method = $is_false ? 'rollback' : 'commit';
$this->$method(); |
|
jonMar 20, 2015
42
|
|
shyangsMar 20, 2015
43
@griffinqiu
難看←_← |
|
FelldeadbirdMar 20, 2015
44
最讨厌这种不加 括号的语句了。调试不好调。看着也不爽。
|
|
ETiVMar 20, 2015
45
|
|
fr0mMar 20, 2015
46
@griffinqiu readability diaobaole
|
|
b821025551bMar 20, 2015
47
@ETiV xx为真,yy为假,括号里为假,会执行zz,这样会导致yy和zz都被执行 :)@griffinqiu 在39楼的改进版才是正确的
|
|
ETiVMar 20, 2015
48
|
|
chmlaiMar 20, 2015
49
不用改!
|
|
iothMar 20, 2015
51
php也想优雅?
py笑了。 php就比c难看那么一点,当年才愿意用pascal不用c c就是合适懒人。 |
|
recall704Mar 20, 2015
52
do_rollback() if is_false else do_commit()
python 的写法 |
|
53
优雅不是说代码量少,而是容易看懂,层次结构合理清洗,所以不仅要这么写,而且要加上大括号。
|
|
fxxkgwMar 20, 2015
54
$this->rollbakc() if($is_false) else $this->commit()
python |
|
jasontseMar 20, 2015 via Android
57
标题应该改成
这种一句话的 if, else 有没有难以阅读的处理方法? |
|
shinyMar 20, 2015
58
这个时候总是能想起一个成语:大巧若拙
|
|
rmingMar 20, 2015
60
$method = $is_false ? "rollback" : "commit" ;
call_user_func([$this, $method]); 这样的写法,其实一开始我是拒绝的。。。 |
|
gihniusMar 20, 2015
61
Lisp style:
(if bool then else) (if false rollback-this commit-this) (if is-false (rollback this) (commit this)) (if (false this) (rollback this) (commit this)) |
|
znoodlMar 20, 2015
62
前几天刚写了个一行的,后来又改掉换成多行
(a && b) || c a ? b : c 这两种效果应该相同 |
|
rushcheyoMar 20, 2015
63
(if (is-false) (funcall rollback) (funcall commit))
|
|
rushcheyoMar 20, 2015
64
(if (is-false) (rollback) (commit))
|
|
65
很奇怪的事情,要优雅,为什么不用异常处理?而且居然没人提到,很多人都在单纯地“优化”这句 if。
如果用的是 PDO 就更不可思议了,感觉没有好好看官方的例子。 |
|
ryd994Mar 20, 2015 via Android
66
if ($is_false) $this->rollback();
else $this->commit(); 这样呢? 用缩进,同时在同一行,不用花括号因为不可能看错 |
|
glongzhMar 20, 2015
67
if...else不就是干这个的么。。。这都不用,那各语言的if...else是什么用途?
|
|
soluMar 21, 2015
68
我也觉得直接用if else就好,如果想绕,也是可以的。
call_user_method_array(['rollback', 'commit'][intval(boolval($is_false))], $this, []); |
|
SyecMar 21, 2015
69
我觉得这样写就挺好呀,可读性多好
|
|
kisshereMar 21, 2015
70
楼上的,我就不明白,一堆后端代码有啥好简化的?给自己看孤芳自赏好证明自己很牛叉,用了一堆三元运算符就是大神了?反正也没人看见你的代码,如果是js,用三元运算符之类的逼格还高点,至少还有人看得见
|
|
picasso250Mar 22, 2015
71
逻辑派:
$ok or $db->rollback(); $ok and $db->commit(); 动态派: $db->{$ok ? 'commit' : 'rollback'}(); ps 但是我支持多行派、人能看懂派。 |
|
picasso250Mar 22, 2015
72
@lujjjh 确实,数据库操作和exception简直是绝配。
|
|
bmy001Mar 23, 2015
73
直接用三元不就好了?
|