有时候只有一句话的判断的时候,不太想写 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 ![]() 可读性优先 |
![]() | 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 ![]() 你这么写的话可读性就很差了。 有些语言可以这么写: 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 U7Q5tLAex2FI0o0g 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 可读性优先,不推荐这么写。 |