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