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