Re: [讨论] 写三元判断式code review被打枪

楼主: CloudyWing (孤单ㄉ翼)   2022-12-28 00:16:05
这边不针对效能,也不针对说阶层太多,应该用什么方式重构之类的
只是看到有人提到巢状的三元运算子,阅读性太差,应该改回用if else写
我只是好奇两者的可读性有差很多吗?
以下只是举例,不是指实务上会真的这样写
(1) 三元运算子:
int i = condition1
? condition2
? condition3
? 1
: 2
: 3
: 4;
(2) if else:
int i;
if (condition1) {
if (condition2) {
if (condition3) {
i = 1;
} else {
i = 2;
}
} else {
i = 3;
}
} else {
i = 4;
}
单就上面的范例来说,我觉得两者可读性差不多,还是只是因为我看习惯产生的错觉 XD
以我自己的观点来看,像这种条件式指派单一变量值的情境,三元写起来比较顺手
也不用担心像在写 if else 时,因漏写了 else 导致有情况没指派到值
作者: saxontai (黑暗,点缀孤零零的星)   2022-12-28 00:18:00
作者: ben810514 (Benjamin)   2022-12-28 01:34:00
作者: hegemon (hegemon)   2022-12-28 01:45:00
阅读性差很多好吗.....
作者: unixxxx (皓皓)   2022-12-28 01:57:00
原Po认真? 明显一阅读性比较好
作者: Ericz7000 (Ericz7000nolan)   2022-12-28 03:35:00
:(
作者: xxi511 (少北)   2022-12-28 07:50:00
这种情况两个都不适用,重写好吗
作者: cokellen (cokellen)   2022-12-28 08:10:00
觉得差很多
作者: knives   2022-12-28 08:31:00
写成波动拳最棒
作者: testPtt (测试)   2022-12-28 08:42:00
通常会拆开多层 常遇到的问题是每层里的程式码一长串如果里面都是这种简单内容其实都OK
作者: LeoSW (月夜飘雪)   2022-12-28 08:50:00
这种case 我会写成function,把巢状结构摊平,增加可读性以及维护性
作者: sniper2824 (月夜)   2022-12-28 09:20:00
差很多==
作者: Lipraxde (Lipraxde)   2022-12-28 10:03:00
Condition 加个 not 就可以摊成平的了...
作者: YukiTW (ゆうき)   2022-12-28 11:07:00
你这例子看起来(一)比较好懂但实际上每个判断式里的function变多的话,就是(二)比较好
作者: qwer338859 (温莎公爵)   2022-12-28 11:14:00
都很丑 拆掉好吗= =
作者: zxcasdjason1 (nice_Sky)   2022-12-28 11:20:00
你看看你在说些什么 XD
作者: GLaDOS1105 (HAHAHA)   2022-12-28 11:33:00
都超丑
作者: timsheu (为道日损)   2022-12-28 12:02:00
写成巢状是wtf…
作者: Alex548291 (ARS·L)   2022-12-28 12:30:00
丑到流汤 而且这串为啥要一直讨论啊 啊就看自己公司规定啊 干嘛一直洗
作者: leolarrel (真.粽子无双)   2022-12-28 13:21:00
你的错觉
作者: abraxas (Abr.)   2022-12-28 13:36:00
举一个正常人都会摊平的例子真的有效吗?
作者: unixxxx (皓皓)   2022-12-28 13:42:00
用function的话 会影响效能
作者: WaterLengend (Leeeeeeeeooooooo)   2022-12-28 14:23:00
我曾经看过写成这样的可以当主管,听说一年一百多,颗颗
作者: hidog (.....)   2022-12-28 14:40:00
function造成的效能影响通常不大
作者: leolarrel (真.粽子无双)   2022-12-28 14:54:00
在某padle效果器,if-else + function 的效能就差很大了干死老板硬要用效能很差的MCU*pedal效果器
作者: CoNsTaR ((const *))   2022-12-28 15:14:00
if else 有比较好阅读
作者: gofigure (平行世界)   2022-12-28 15:57:00
chatGPT:他们在吵什么
作者: bear1414 (story)   2022-12-28 16:20:00
三元在硬件语言如VERILOG在逻辑电路写法上比较方便
作者: testPtt (测试)   2022-12-28 16:28:00
毕竟硬件用goto很正常 到软件就可能被骂
作者: unixxxx (皓皓)   2022-12-28 16:35:00
goto js 很常见
作者: viper9709 (阿达)   2022-12-28 18:03:00
拜托别用第一种写...
作者: NCKUFatPork (成大肥宅悲歌)   2022-12-28 18:50:00
两个写法都很烂,请用guard clauses
作者: MoonCode (MoonCode)   2022-12-28 20:22:00
什么语言没有 elseif 且没有替代品
作者: kyoe (缘份‧不再)   2022-12-28 21:22:00
guard clauses+1
作者: DendiQ (貔貅)   2022-12-28 22:00:00
写那样 SonarQube 会叫
作者: pot1234 (锅子)   2022-12-28 22:12:00
if else一定要弄三层?写法一也很讨厌
作者: viper9709 (阿达)   2022-12-28 23:40:00
巢状的三元会是一场灾难...脑袋要转两次@@
作者: BlueBird5566 (生日56)   2022-12-29 00:07:00
就是习不习惯的问题啊= =1、2的可读性其实根本一样 就是习惯问题说巢状难读的是指全写在一行 没像你这样排版的有的还是JAVA + HTML + JSTL 组出来
作者: pot1234 (锅子)   2022-12-29 01:24:00
觉得写法1比较困难阅读的原因是没括号又少见,要稍微想一下。if else虽然缩三层很烦但不太可能看错。会写出这种code的话排版大概也不会都排的跟你一样,要多花一下时间找冒号,个人感觉啦。
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2022-12-29 04:03:00
实务上都还是会用formatter吧,review时不会看到这种特殊排版
作者: MoonCode (MoonCode)   2022-12-29 04:07:00
高手
作者: ezaki (御坂小衣)   2022-12-29 08:38:00
自己举的例看不出差别,有点可怕
作者: lycantrope (阿宽)   2022-12-29 12:40:00
高手境界
作者: GoalBased (Artificail Intelligence)   2022-12-29 13:45:00
你的例子,我觉得可读性差不多,但我会写2如果说以后这段都不改,就没差,会被改2我觉得好一点中断点也好下一点可读性本来就要根据现实情况做判断跟你说怎样一定好的,多数是见树不见林
作者: ku72 (ku72)   2022-12-29 21:02:00
老实说 只要没事先规范两个做法我都会接受 如果都只看自己爱看的code style那接手到烂code或者工作需要得去看别人的code能保证都是自己要的写法?
作者: hongsiangfu   2022-12-30 07:08:00
第一种写法用反逻辑别缩排cd1?1:(换行)cd2?2:(换行)...(cdn)cdn:n:m曾在verilog语法看过类似排版更正cdn?n:m
作者: ku399999   2022-12-30 09:18:00
巢状三元分没有明确分界线 需靠排版维持 即使不讨论是否好读 巢状三元更难改也是不争的事实
作者: kyoe (缘份‧不再)   2022-12-30 12:04:00
php 现在都用 ?: 跟 ?? 香~
作者: acgotaku (otaku)   2022-12-30 16:38:00
第一种看到会想吐吧,写多层判断就很恶心了,再写成这样

Links booklink

Contact Us: admin [ a t ] ucptt.com