有时候只有一句话的判断的时候,不太想写 if,想用逻辑运算符代替,但是感觉这样可读性很差。大家能接受这种写法嘛?
a && success()
b || error()
1
dot2017 2019-01-22 12:12:27 +08:00
在你认为难读的地方加备注不就好了
|
2
oott123 2019-01-22 12:12:29 +08:00 via Android
这有个术语叫短路求值。
不能接受。 |
3
frylkrttj 2019-01-22 12:13:08 +08:00
感觉这是神操作
|
4
rockyou12 2019-01-22 12:14:50 +08:00
非常不好,一般读这种代码脑袋要转下弯,特别容易出 bug
|
5
jifengg 2019-01-22 12:23:33 +08:00
一般我写自己用的代码,喜欢这么写。
如果你的代码还要给别人看或者别人用,那不太推荐。再不然的话,多加点注释,有用的注释 |
6
learnshare 2019-01-22 12:26:03 +08:00 2
可读性优先
|
7
AlisaDestiny 2019-01-22 13:02:51 +08:00
写 js 的话常用。
比如在调用回调函数的时候 cb && cb(data); 或者为了解决某些兼容性问题的时候 a = a || aa; |
8
Torpedo 2019-01-22 13:03:23 +08:00 via Android
js 里常规操作。。。
|
9
msg7086 2019-01-22 13:06:16 +08:00 2
你这么写的话可读性就很差了。
有些语言可以这么写: send_email and show_success(xx) connect_db or show_error(xx) 原生英语语法,读起来就很舒服了。 |
10
regist 2019-01-22 13:14:54 +08:00 via iPhone
Gentoo 的 ebuild 脚本,一直这么写
|
11
rabbbit 2019-01-22 13:44:04 +08:00
一般用来做判断加个注释应该没啥问题
要是这么写还不加注释估计会被打 num = (123.45 + 888) / 10 | 0 num & 1 && num-- |
12
garlics OP |
13
mooncakejs 2019-01-22 14:33:27 +08:00
js 和 php 里用的很多,c/java 里很少见。
|
14
lucifer9 2019-01-22 14:39:52 +08:00
喜欢这么用的话,投奔 Rust 吧
and_then, or_else 满足你 |
15
RqPS6rhmP3Nyn3Tm 2019-01-22 14:40:32 +08:00 via iPhone
没有 lazy evaluation 就炸了
|
17
GeruzoniAnsasu 2019-01-22 14:57:57 +08:00
拿 c++来说,这种写法有个很严重的问题就是求值要先于运算符
https://zh.cppreference.com/w/cpp/language/eval_order 2) 任何运算符的运算数的值计算(但非副效应)先序于运算符结果的值计算(但非副效应)。 && 右边的 sucess()函数必定会先调用,得出结果后,才会进行&&比较,而如果 success 是个 void 类型,此处甚至无法编译,所以 C/JAVA 里不可能见到这种写法,语义上都无法成立 只在 shell 脚本里见过 [ xxx ] && do_sth |
18
nichijou 2019-01-22 15:04:53 +08:00
像 if else 本身是英语,其语义不需思考已经形成条件反射了
而这种写法在如果该语言很常见比如 Perl,因为用得多所以可以放心使用 但如果该写法在该语言不常见的话还是不要了,别人看了可能会懵一下 |
19
sosilver 2019-01-22 15:28:38 +08:00 via Android
@GeruzoniAnsasu 并不是,你看第六条。短路逻辑运算符类似 if/else。
|
20
GeruzoniAnsasu 2019-01-22 15:35:10 +08:00
@sosilver 试完发现我说错了
|
21
maomo 2019-01-22 15:42:25 +08:00
会不会被打取决于看代码的人喜不喜欢做逻辑题
|
22
jookr 2019-01-22 15:46:52 +08:00
我拍黄片经常这么写
``` !$var && $this->error('报错'); $insert['name'] = input('post.name/s') ?: $this->error('name 获取失败'); ``` |
23
littleylv 2019-01-22 15:47:26 +08:00
if (a) {
success(); } 可以说我今天写了 3000 行代码。 a && success() 只能说我今天写了 1000 行代码。 (狗头 |
24
arthas2234 2019-01-22 15:49:23 +08:00
比较忙或者脑子不太清醒的时候,容易翻车
|
25
shyangs 2019-01-22 16:39:36 +08:00
JS 里常规操作
``` var locale = navigator.language || navigator.browserLanguage; ``` |
26
meiguo10086 2019-01-22 17:13:22 +08:00
js 常见 不会被打。不过还是建议用 if 抱起来 多不了多少代码。但是很优雅可读性高。貌似很多大佬都建议包起来
|
27
grewer 2019-01-22 17:20:06 +08:00
我也 觉得是常规操作 习惯了之后 可读性不是问题 写得也快点..
|
28
jsq2627 2019-01-22 17:29:26 +08:00
JS 的常规操作,特别是空值检测和 JSX 里面条件分支
|
29
libook 2019-01-22 17:33:24 +08:00
可读性优先,不推荐这么写。
|