這邊不針對效能,也不針對說階層太多,應該用什麼方式重構之類的
只是看到有人提到巢狀的三元運算子,閱讀性太差,應該改回用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作者:
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,把巢狀結構攤平,增加可讀性以及維護性
作者:
Lipraxde (Lipraxde)
2022-12-28 10:03:00Condition 加個 not 就可以攤成平的了...
作者:
YukiTW (ゆうき)
2022-12-28 11:07:00你這例子看起來(一)比較好懂但實際上每個判斷式裡的function變多的話,就是(二)比較好
作者: zxcasdjason1 (nice_Sky) 2022-12-28 11:20:00
你看看你在說些什麼 XD
作者:
timsheu (為道日損)
2022-12-28 12:02:00寫成巢狀是wtf…
醜到流湯 而且這串為啥要一直討論啊 啊就看自己公司規定啊 幹嘛一直洗
作者: abraxas (Abr.) 2022-12-28 13:36:00
舉一個正常人都會攤平的例子真的有效嗎?
作者:
unixxxx (皓皓)
2022-12-28 13:42:00用function的話 會影響效能
我曾經看過寫成這樣的可以當主管,聽說一年一百多,顆顆
作者: hidog (.....) 2022-12-28 14:40:00
function造成的效能影響通常不大
在某padle效果器,if-else + function 的效能就差很大了幹死老闆硬要用效能很差的MCU*pedal效果器
作者:
CoNsTaR ((const *))
2022-12-28 15:14:00if else 有比較好閱讀
作者: bear1414 (story) 2022-12-28 16:20:00
三元在硬體語言如VERILOG在邏輯電路寫法上比較方便
作者:
testPtt (測試)
2022-12-28 16:28:00畢竟硬體用goto很正常 到軟體就可能被罵
作者:
unixxxx (皓皓)
2022-12-28 16:35:00goto js 很常見
作者:
MoonCode (MoonCode)
2022-12-28 20:22:00什麼語言沒有 elseif 且沒有替代品
作者:
kyoe (緣份‧不再)
2022-12-28 21:22:00guard clauses+1
作者:
DendiQ (貔貅)
2022-12-28 22:00:00寫那樣 SonarQube 會叫
作者:
pot1234 (鍋子)
2022-12-28 22:12:00if else一定要弄三層?寫法一也很討厭
就是習不習慣的問題啊= =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自己舉的例看不出差別,有點可怕
作者:
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:00php 現在都用 ?: 跟 ?? 香~
作者:
acgotaku (otaku)
2022-12-30 16:38:00第一種看到會想吐吧,寫多層判斷就很噁心了,再寫成這樣