Soft_Job 板


LINE

这边不针对效能,也不针对说阶层太多,应该用什麽方式重构之类的 只是看到有人提到巢状的三元运算子,阅读性太差,应该改回用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 导致有情况没指派到值 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 203.204.160.44 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1672157770.A.D00.html
1F:→ saxontai: https://www.youtube.com/watch?v=CFRhGnuXG-4 12/28 00:18
2F:嘘 MoonCode: 12/28 01:20
3F:嘘 ben810514: 有 12/28 01:34
4F:嘘 hegemon: 阅读性差很多好吗..... 12/28 01:45
5F:嘘 unixxxx: 原Po认真? 明显一阅读性比较好 12/28 01:57
老实说我也是觉得明显一比较好啊 只是看前面文章和推文,想说讲差不多来测一下风向 XD
6F:推 Ericz7000: :( 12/28 03:35
7F:→ xxi511: 这种情况两个都不适用,重写好吗 12/28 07:50
8F:→ cokellen: 觉得差很多 12/28 08:10
9F:→ knives: 写成波动拳最棒 12/28 08:31
10F:→ testPtt: 通常会拆开多层 常遇到的问题是每层里的程式码一长串 12/28 08:42
11F:→ testPtt: 如果里面都是这种简单内容其实都OK 12/28 08:44
12F:推 LeoSW: 这种case 我会写成function,把巢状结构摊平,增加可读性以 12/28 08:50
13F:→ LeoSW: 及维护性 12/28 08:50
实务上来说我也是会用 Array Map,或是拆成 Function 来摊平巢状结构 大部分的情况下写到两层就是极限 而且真写成巢状,以这案例会在 Condition 加 Not 来对调顺序 所以从推文来看,问题点不在巢状三元,而是只要是写成多重巢状都不好阅读 有些情境在相同结构下,反而有人会觉得改写 if else 却降低可读性
14F:→ sniper2824: 差很多== 12/28 09:20
15F:→ Lipraxde: Condition 加个 not 就可以摊成平的了... 12/28 10:03
就看到前面说巢状三元可读性劣於if else 所以故意写一个很丑的结构来看一下相同结构下,是否真的三元比较难阅读 XD
16F:推 YukiTW: 你这例子看起来(一)比较好懂 12/28 11:07
17F:→ YukiTW: 但实际上每个判断式里的function变多的话,就是(二)比较好 12/28 11:08
18F:嘘 qwer338859: 都很丑 拆掉好吗= = 12/28 11:14
19F:推 zxcasdjason1: 你看看你在说些什麽 XD 12/28 11:20
20F:嘘 GLaDOS1105: 都超丑 12/28 11:33
21F:嘘 timsheu: 写成巢状是wtf… 12/28 12:02
22F:嘘 Alex548291: 丑到流汤 而且这串为啥要一直讨论啊 啊就看自己公司规 12/28 12:30
23F:→ Alex548291: 定啊 干嘛一直洗 12/28 12:30
※ 编辑: CloudyWing (61.216.190.109 台湾), 12/28/2022 13:21:11
24F:→ leolarrel: 你的错觉 12/28 13:21
※ 编辑: CloudyWing (61.216.190.109 台湾), 12/28/2022 13:41:25
25F:→ abraxas: 举一个正常人都会摊平的例子真的有效吗? 12/28 13:36
我认真说,如果是专案公司,你可能高估了正常人的水平了 多的是能动就好(叹气 以我的经验,我之前同事如果修改要在 if 内部加判断就直接加了 多半不会条件反转 另外 else if 本身就是巢状的,有些程式语言本身没有提供 else if 语法 它们的 else if 是以下程式码排版後产生看起来摊平的效果 if (condition1) { } else { if (condition2) { } } 而且两种写法都反转後,if else 也真未必有比较好阅读 例如: 三元运算子: int i = condition1 ? 1 : condition2 ? 2 : condition3 ? 3 : 4; if else: int i; if (condition1) { i = 1; } else if (condition2) { i = 2; } else if (condition3) { i = 3 } else { i = 4; }
26F:→ unixxxx: 用function的话 会影响效能 12/28 13:42
※ 编辑: CloudyWing (61.216.190.109 台湾), 12/28/2022 14:20:13
27F:推 WaterLengend: 我曾经看过写成这样的可以当主管,听说一年一百多, 12/28 14:23
28F:→ WaterLengend: 颗颗 12/28 14:23
29F:推 hidog: function造成的效能影响通常不大 12/28 14:40
30F:→ leolarrel: 在某padle效果器,if-else + function 的效能就差很大了 12/28 14:54
31F:→ leolarrel: 干死老板硬要用效能很差的MCU 12/28 14:55
32F:→ leolarrel: *pedal效果器 12/28 14:57
33F:嘘 CoNsTaR: if else 有比较好阅读 12/28 15:14
34F:推 gofigure: chatGPT:他们在吵什麽 12/28 15:57
35F:推 bear1414: 三元在硬体语言如VERILOG在逻辑电路写法上比较方便 12/28 16:20
36F:→ testPtt: 毕竟硬体用goto很正常 到软体就可能被骂 12/28 16:28
37F:→ unixxxx: goto js 很常见 12/28 16:35
38F:→ viper9709: 拜托别用第一种写... 12/28 18:03
39F:嘘 NCKUFatPork: 两个写法都很烂,请用guard clauses 12/28 18:50
刚 Google 一下,Guard Clauses 我也很爱用 只是我之前不知道它叫 Guard Clauses
40F:嘘 MoonCode: 什麽语言没有 elseif 且没有替代品 12/28 20:22
这边来说明一下 else if 是怎麽来的 1. 完整程式长这样: if (condition1) { } else { if (condition2) { } else { } } 2. 我们已知 else 後面只有单行可以不用加大括弧,而 if else 语句将之视为一个单行 所以我们将第一个 else 的大括弧去掉变成以下这样 if (condition1) { } else if (condition2) { } else { } } 3. 最後再用排版将第二个 if 放置在第一个 else 後面,else if 就诞生了 if (condition1) { } else if (condition2) { } else { } 所以我前面说 else if 本质上还是巢状结构,只是靠排版摊平 不过有些程式语言像 PHP 是真的有提供 elseif 这个关键词
41F:推 kyoe: guard clauses+1 12/28 21:22
42F:→ DendiQ: 写那样 SonarQube 会叫 12/28 22:00
43F:推 pot1234: if else一定要弄三层?写法一也很讨厌 12/28 22:12
本文一开始就加一堆但书,并注名只是举例,非实务上的写法 XD 实际上当然是 Array Map、Function 和 Guard Clauses 等方法来优化写法 XD 推文提到的比较好的写法,才是我实务上真正在写的 大部分情况我最多只会写到两层,且不会用成波动拳结构 我只是因为前面文章有推文提到巢状三元运算子容易漏看,且不好阅读 而改回写成 if else 关於容易漏看这部分我是疑惑为什麽会容易漏看 至於可读性部分,两种方法当然都很糟 但看起来也不是每个人都认为巢状 if else 可读性优於巢状三元运算子 实际上真正影响阅读的多层巢状这件事,真的多层巢状起来 if else 和 三元运算子都不好阅读 ※ 编辑: CloudyWing (203.204.160.44 台湾), 12/28/2022 23:35:33
44F:→ viper9709: 巢状的三元会是一场灾难...脑袋要转两次@@ 12/28 23:40
45F:嘘 BlueBird5566: 就是习不习惯的问题啊= = 12/29 00:07
46F:→ BlueBird5566: 1、2的可读性其实根本一样 就是习惯问题 12/29 00:07
47F:→ BlueBird5566: 说巢状难读的是指全写在一行 没像你这样排版的 12/29 00:08
48F:→ BlueBird5566: 有的还是JAVA + HTML + JSTL 组出来 12/29 00:10
49F:→ pot1234: 觉得写法1比较困难阅读的原因是没括号又少见,要稍微想 12/29 01:24
50F:→ pot1234: 一下。if else虽然缩三层很烦但不太可能看错。会写出这 12/29 01:24
51F:→ pot1234: 种code的话排版大概也不会都排的跟你一样,要多花一下时 12/29 01:24
52F:→ pot1234: 间找冒号,个人感觉啦。 12/29 01:24
53F:推 Sunal: 实务上都还是会用formatter吧,review时不会看到这种特殊 12/29 04:03
54F:→ Sunal: 排版 12/29 04:03
55F:嘘 MoonCode: 高手 12/29 04:07
56F:→ ezaki: 自己举的例看不出差别,有点可怕 12/29 08:38
57F:→ lycantrope: 高手境界 12/29 12:40
58F:推 GoalBased: 你的例子,我觉得可读性差不多,但我会写2 12/29 13:45
59F:→ GoalBased: 如果说以後这段都不改,就没差,会被改2我觉得好一点 12/29 13:46
60F:→ GoalBased: 中断点也好下一点 12/29 13:46
61F:→ GoalBased: 可读性本来就要根据现实情况做判断 12/29 13:47
62F:→ GoalBased: 跟你说怎样一定好的,多数是见树不见林 12/29 13:48
63F:→ ku72: 老实说 只要没事先规范两个做法我都会接受 如果都只看自己爱 12/29 21:02
64F:→ ku72: 看的code style那接手到烂code或者工作需要得去看别人的code 12/29 21:02
65F:→ ku72: 能保证都是自己要的写法? 12/29 21:02
66F:→ hongsiangfu: 第一种写法用反逻辑别缩排 12/30 07:08
67F:→ hongsiangfu: cd1?1:(换行)cd2?2:(换行)...(cdn)cdn:n:m 12/30 07:11
68F:→ hongsiangfu: 曾在verilog语法看过类似排版 12/30 07:12
69F:→ hongsiangfu: 更正cdn?n:m 12/30 07:12
70F:→ ku399999: 巢状三元分没有明确分界线 需靠排版维持 即使不讨论是否 12/30 09:18
71F:→ ku399999: 好读 巢状三元更难改也是不争的事实 12/30 09:18
72F:推 kyoe: php 现在都用 ?: 跟 ?? 香~ 12/30 12:04
73F:→ acgotaku: 第一种看到会想吐吧,写多层判断就很恶心了,再写成这样 12/30 16:38







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP