看板 Soft_Job 關於我們 聯絡資訊
小弟寫java的 以前常常寫三元判斷式 就比如說 String a; if(con) { a= "aaa"; } else { a="bbb"; } 這樣就要佔掉六行 所以我通常都是寫 String a= con ? "aaa" : "bbb"; 從五行變成一行 在我看來簡潔又方便 但最近給一個資深前輩code review的時候 他說不要用三元判斷式 因為不好閱讀 他工作那麼久也從來不用三元判斷式的 而且java有很多套件都可以用來取代三元判斷式 所以用三元判斷式真的不好嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.188.168 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1670949794.A.611.html
qwer338859: 大部分情況都會變更難閱讀 12/14 00:48
orangelite: 不會耶我覺得還好,不要有巢狀連續判斷的話我能接受 12/14 00:49
orangelite: 。 12/14 00:49
tsao1211: 如果短的話算很好讀吧 12/14 00:50
xam: 看情況,如果確定只會是簡單狀態變換就沒差,但如果以後會變成a 12/14 00:53
xam: re a2 a3,b1 b2那我甘願一開始就用括號寫 12/14 00:53
dnabossking: 缺點多多 12/14 00:55
TSW: 邏輯簡單或是很短的方法裡面用短的三元OK 12/14 00:57
TSW: 其他地方就有人會看漏 12/14 00:57
TSW: 有些團隊是避免爭論所以完全禁用,所以不要用最省事 12/14 00:59
GLaDOS1105: consistency 最重要 如果原本 codebase 就沒有用它就 12/14 01:00
GLaDOS1105: 不要用 12/14 01:00
humanfly: code style有規定就別用,大家一致 12/14 01:00
shomingchang: 不一樣的東西吧 三元運算有回傳值 12/14 01:14
keel90135: 判斷單一ok 不要判斷>2個就好 12/14 01:33
qwe70302: 就怕嵌套多層,跟鬼一樣,看那一堆冒號直接中風 12/14 01:36
yyhsiu: 佔掉六行真的沒那麼誇張… 不然 IDE 也可以處理 12/14 01:44
BlacksPig: 如果有參與開發的任何一個人不懂,那就不要 12/14 01:56
k7ji91ab5m: 這種比較簡單的 真的沒甚麼好避免的 12/14 02:23
wulouise: 要:多:潮:有?多?巢? ;問回傳值為多少 12/14 02:28
Lhmstu: 要看實際例子才準 12/14 02:36
alan3100: 目的是利於閱讀吧 行數根本不是重點 12/14 03:02
bill0205: 如果只有二元判斷那還好 如果是多重判斷 寧願你寫if el 12/14 06:02
bill0205: se 甚至seitct更為好讀 12/14 06:02
bill0205: switch 12/14 06:02
pttano: 程度不好還學人review 啥小,可憐喔 12/14 06:49
Royne: 他的問題 12/14 06:50
CoNsTaR: if else 加 log 方便,擴展邏輯也方便 12/14 07:01
CoNsTaR: ternary 除了少打幾個字以外有啥優點? 12/14 07:01
sakyle: 你可以用 String a; a = "bbb"; if(con) a = "aaa"; 12/14 07:01
sakyle: 這樣只要四行,不過三元還是比較方便啦,不要三元裡面 12/14 07:02
sakyle: 又塞三元就好 12/14 07:02
hidog: 遵守團隊規範 12/14 07:32
s06yji3: 現在各種dis同事長官 12/14 07:33
aidansky0989: 一層可,多層不要 12/14 07:35
vencil: 佔6行沒那麼嚴重,以後隨需求擴充或調整,code亂長更麻煩 12/14 07:39
Lomonosov: if-else裡面只有assign一個變數的話 很ok啊 12/14 07:39
Killercat: 三元盡量只用一層就好 12/14 07:40
Killercat: 你這個例子沒啥問題,有問題的是像這種 12/14 07:40
Killercat: a = a > b ? a : b > c ? b : c 12/14 07:42
Killercat: 三元套娃算是很嚴重的bad smell 12/14 07:44
timTan: 喜歡if else 12/14 07:44
loadingN: 行數還好,但長度最好注意 12/14 08:08
cokellen: 我覺得 if else 人眼閱讀速度較快 12/14 08:12
joery: 考量到未來異動彈性,及閱讀性 12/14 08:22
pizzahut: 看你公司有沒有規定coding style 啊 12/14 08:25
ericthree: 沒有絕對的對錯 看誰比較大就聽誰的 12/14 08:30
YukiTW: 推Killercat的例子,用太多層就有點討厭了 12/14 08:36
APTON: 單純的T/F就算了,但是就是有人會繼續接下去寫。三元判斷裡 12/14 08:38
APTON: 面再接一個三元判斷,所以建議少用。 12/14 08:38
bheegrl: 如果寫成三元會太長我就會考慮改寫法 12/14 08:40
gs8613789: 不會比較好懂+1 12/14 08:44
stupid0319: 別鬧了,MSDN 一大堆三元運算 12/14 08:48
lllll12b56: 真的討厭「?」 12/14 08:52
ttss4092: if else 一票,除非公司現在和未來都是找高手 12/14 08:56
testPtt: 有註解傳回什麼就好 基本不會去追內層 12/14 08:57
icydream: 不要巢狀還好吧? 12/14 08:58
sharek: 容易變得難閱讀,真的覺得很多行用function 包起來 12/14 09:04
B0988698088: 你不會問他推薦怎麼寫再拿上來給大家比較哦 12/14 09:04
linzomaa: 短的很好讀啊,不然就加個註解 12/14 09:28
youtuuube000: 用function包起來+1 12/14 09:31
lovdkkkk: 簡單的情況可以用 不過規定不要用就別用 12/14 09:40
leolarrel: 個人真的建議不要用.但是上班當狗就要聽老闆的 12/14 09:44
chchwy: 我喜歡用,有時候會 讓程式變得好閱讀 12/14 09:46
bill0205: 有沒有人看過這樣寫的 var temp = con ? this.a() : thi 12/14 09:49
bill0205: s.b(); 看到這種有點不知道該不該給他過 12/14 09:49
t64141: 簡單時好用,太複雜不好,但怎樣算太複雜每個人都不一樣 12/14 09:59
a12838910: 不要巢狀 就可以 之前同事寫過巢狀 傻眼qq 12/14 10:03
testPtt: 我覺得寫這個都不行的大概也不能接受lambda 12/14 10:13
jobintan: Ninja Code? 12/14 10:20
jobintan: 不過公司有Code review與coding style規範還是好事…… 12/14 10:21
sniper2824: 兩層就寫啊 寫太多層才會不知道幹嘛 而且應該要包起來 12/14 10:25
aa06697: 要看多長 12/14 10:26
vi000246: 不要巢狀 12/14 10:34
vi000246: 讀到這段如果花了一秒以上理解 就要重構 12/14 10:35
whatzup1124: 老實說這算基礎吧 12/14 10:40
tofuflower: 看團隊規範啊 有 coding guideline 就照規定走 12/14 10:57
tofuflower: 沒規範就先寫個 guideline 12/14 10:57
q00153: 私以為,一個東西會存在就是有它的用處,適合的時候就用適 12/14 10:58
q00153: 合的方法,極端的只用或不用都只是一個對自己有利的借口罷 12/14 10:58
q00153: 了。 12/14 10:58
TSMCfabXX: 談到 coding style 話語權才是唯一真理 12/14 11:01
jobintan: Indeed,只有Lead字輩,才能決定Coding style。 12/14 11:04
tsairay: 看三元判斷式裡面的內容 12/14 11:12
tsairay: 如果你的條件很長而不是單純的if a=b這種 12/14 11:12
tsairay: 那的確就會難閱讀 12/14 11:12
jason222333: 你是對的 12/14 11:14
bab7171: 這怎麼不好閱讀?? 12/14 11:19
zxcasdjason1: 寫法就討論 團隊都能配合就好 12/14 11:29
dnabossking: 尚未看到好的回答 12/14 11:37
zxcasdjason1: 蠻常見到新人會煩惱,像是看到前人的用 if-else if 12/14 11:39
zxcasdjason1: 蓋個20幾樓,納悶怎不用 switch-case 重寫這類的 12/14 11:39
zxcasdjason1: 問題,經驗上,我認為重構效益大於局部寫法修正, 12/14 11:39
zxcasdjason1: 看得懂且性能差異不大的話別糾結太多 12/14 11:39
testPtt: 通常我是左式ok就不care右式 除非右式內容常常改再分出來 12/14 11:41
zxcasdjason1: 原po 提得狀況,我認為可以使用,但如果是 String 12/14 11:51
zxcasdjason1: a = cond1 ? "a" : (cond2?"c" : "d") 這種還是展 12/14 11:51
zxcasdjason1: 開來寫比較好 12/14 11:51
somefatguy: 你這個case寫if else的我會叫他改成三元 12/14 11:57
knives: 以可讀性來說,肯定是不行的 12/14 12:00
somefatguy: 多層別用三元,但用if else也不好看,要包function用e 12/14 12:00
somefatguy: arly return 12/14 12:00
knives: 其實我是覺得是那個資深前輩看不懂,如果一開始是很簡單的 12/14 12:02
knives: 兩個簡單條件就還好 12/14 12:03
ke265379ke: 出事誰扛責任就聽誰的 12/14 12:06
Lomonosov: 對於一層判斷+assign 三元可以一眼就知道要做什麼 熟悉 12/14 12:09
Lomonosov: 這種寫法後 讀if-else的負擔還比較大一點點 12/14 12:09
DarkIllusion: 你前輩的理由沒有說服力 以這例子來說並沒有較難讀 12/14 12:21
DarkIllusion: 但如果你團隊裡看code的都像你前輩這樣 那還是別用 12/14 12:23
NDark: 如果有商業邏輯,寧願分清楚不要省行數 12/14 12:45
chrischen: 宗教問題 不會有結論 12/14 13:11
veryGY: 能力太差的才會看得慢 高手都是這樣寫才快 12/14 13:28
iamshiao: 你是 owner 爽怎麼寫都行,不是那就人在屋簷下,我自己 12/14 13:46
iamshiao: 是蠻喜歡三元的 12/14 13:46
ku399999: 看到很多人連出現三元都不行我還蠻驚訝的 但照團隊規範 12/14 13:49
ku399999: 走也很重要 12/14 13:50
TSMCfabXX: 不用驚訝, 80/20法則 業界不是學校, 也不是在比行數 12/14 14:04
worf: 不用省行數 ~ 12/14 14:11
worf: 重點是看起來怎麼樣 12/14 14:12
alan3100: 除非向lamba那種重於流程表達的寫法,不然你一般判斷簡寫 12/14 14:21
alan3100: 沒啥差,判斷太複雜難看,判斷簡單就只是自己看順不順眼 12/14 14:24
pot1234: 看了很煩@@ 12/14 14:25
justin761002: 這種短短都沒差,最怕是超過兩個螢幕寬度的三元... 12/14 14:34
justin761002: 邏輯都一樣,易讀性差很多,我會選擇易讀性 12/14 14:35
htury: 行數不是重點,重點是整個團隊易讀好維護可擴充 12/14 14:42
htury: 今天再來個ccc條件,你怎麼辦?還不是要if else或when 12/14 14:44
windmax1: 可讀性跟效能才是最大重點 其他都次之 12/14 15:01
jackflu: 所以他推薦怎寫? 有很多套件可以取代,可以舉例一下嗎? 12/14 15:01
windmax1: 跟你前輩溝通看看 簡單易懂的三元沒啥問題 12/14 15:02
jerry840622: 只有一層感覺還好 12/14 15:06
mirror0227: 寫扣本來就是好維護第一 12/14 15:09
shooter555: (condition) ? "YES" : "NO" 這種很好用阿 要取代真的 12/14 15:11
shooter555: 是要多好幾行code 看了就阿雜 12/14 15:11
shooter555: 就跟goto很好用 改用if-else就是要多好幾行 12/14 15:12
acgotaku: 我以前也因為這樣常被擋 12/14 16:06
acgotaku: 不過其實應該只是為了 整份coding style 統一而已 12/14 16:07
acgotaku: 這種被擋還好啦,style 問題都最好解決 12/14 16:07
acgotaku: 最難解決的是思緒問題,每個人對pattern 喜好不一樣 12/14 16:08
acgotaku: 這種觀念差異造成mr過不了。才最頭痛 12/14 16:09
clanguage: 公司就是降...你寫的程式要讓不同智商的人能看懂... 12/14 16:10
kshieh: 題外話,python 的 list comprehension 大家的見解是? 12/14 16:35
s06yji3: 個人2層以內接受。但是2層已經不太好讀了 12/14 16:37
testPtt: 很多發明就是要1行:list.first(x==1).first(x==2)... 12/14 17:13
testPtt: 拆開來寫感覺就很弱 12/14 17:13
TSW: perl系列的可以忽略這串XD 12/14 17:30
Tix: if else也可以寫成一行啊,呵呵 12/14 17:43
Burwei: 有規範照規範,沒規範不刁難 12/14 17:54
NikonD5: 變得很難讀很痛苦 12/14 18:04
Nigger5566: 三元都看不懂是文組吧== 12/14 18:06
wulouise: goto現在c++23有scope_exit可以用啊 12/14 18:17
wulouise: 喔等等這串java 12/14 18:18
internetms52: 一層可以,多層不要,話說你們是沒有更重要的東西 12/14 18:29
internetms52: 可以review了嗎… 12/14 18:29
lovdkkkk: 選幾個估狗查東西時看順眼的 blog 爬他們的文章學跟練 12/14 19:03
lovdkkkk: 或者歷年鐵人賽評價高的找有興趣的爬 12/14 19:04
lovdkkkk: 回錯篇 0rz 12/14 19:05
Murasaki0110: 他大概是覺得未來會變多層 12/14 19:29
fanatics5566: 你這case單層賦值蠻適合用的 12/14 20:08
chbo1993: 你這個例子不用三元 之後會有人搞到a變成 null referen 12/14 20:15
chbo1993: ce 12/14 20:15
shadow0326: 有時候用三元判斷式是為了RAII 12/14 20:19
EKman: 省行數可以幹嘛?空白行都拿掉不是更省 12/14 21:33
jasonwung: 寫長一點真的很難看 12/14 21:39
Kimheeche: 還好啊 看團隊而已 12/14 22:04
WWIII: 你這樣很容易就超長 笨方法 12/14 22:14
SRmoisTEH: 三元用習慣很簡潔吧... 12/14 22:33
zebra10029: 真的是宗教問題 12/14 22:56
purin88: 老鳥太弱了,叫他做leetcode,leetcode十分常用三元 12/14 23:49
viper9709: 短的一層可以,多層不要+1 12/15 00:00
wugesmin: 三元很好用,可以用的很漂亮 12/15 00:43
mrsix: 三元判斷式若把一堆條件寫成超出螢幕的一行,之後也是得拆 12/15 00:45
mrsix: 分問號冒號一行一行來維護。 12/15 00:45
mrsix: 如果遇到那種三四個判斷式用一行三元判斷式實現而且沒有括 12/15 00:48
mrsix: 號的,這種得非常小心,因為後續若要擴充功能很容易出事。 12/15 00:48
mrsix: 當然最精彩的就是把巢狀用一行三元判斷式搞定 12/15 00:50
adsl12367: 單層沒啥問題 蠻常用的 多層三元在debug容易造成困 12/15 01:07
adsl12367: 擾 12/15 01:07
adsl12367: 該拆的還是要拆 12/15 01:07
Sasha0720: 這種小事居然可以這麼熱烈討論 12/15 02:26
dooooris: 一層可 常用的話會反射動作 秒讀懂 12/15 02:30
dooooris: 多層不要 12/15 02:30
WaterLengend: 要是只有一層又沒提前講好就他問題,顆顆 12/15 05:40
airtsubasa: 這件事你上級主管說什麼就說什麼 sideproject你自己爽 12/15 07:30
airtsubasa: 就好 12/15 07:30
airtsubasa: *說什麼就是什麼 12/15 07:31
MonyemLi: 每間都不同,沒什麼對錯。google或speing程式碼在你們c 12/15 07:41
MonyemLi: ode review會過嗎? 12/15 07:41
TuChinJui: code跑起來沒問題,幫你maintain的人閱讀起來沒問題, 12/15 08:15
TuChinJui: 那就沒問題。沒有對錯。協同合作不是寫一些自己爽的然 12/15 08:15
TuChinJui: 後別人痛苦的事情。 12/15 08:15
wsad50232: 字面簡潔 可是腦袋要多轉一圈 = 思緒不簡潔 12/15 09:14
a159753: 看規定 12/15 09:29
gogogogo3333: 除非是團隊共識,不然一般不用 12/15 10:00
nicepeter: 可以用,邏輯簡單的話不影響readability 12/15 10:26
stupid0319: 一人專案,團隊=我決定 12/15 11:31
pennymarkfox: 拜託去看clean code好嗎 12/15 11:57
superpandal: java已經夠囉唆了 一兩層三元還可以 以前我剛入行都 12/15 18:07
superpandal: 被這樣推薦 但是業務邏輯多了就知道無腦if else的壞 12/15 18:07
superpandal: 處 如果是golang我可以接受沒三元 本身就比較簡潔 12/15 18:09
SHANGOYANYI: 沒寫過前端語言吧 前端模板一堆這種東西 12/15 20:07
lauto: 你現在是在工作,不是自爽 12/16 11:53
m9j002: 就跟一夜情一樣,講好就好了 12/16 13:16
CloudyWing: 糟糕,我很常寫巢狀的三元,不過有換行排版應該還好吧 12/16 13:31
nfsong: 拆開比較好放中斷點 12/16 14:57
pig0038: 你前輩就是屬於永遠不會碰 GO/kotlin 的那種人 12/16 15:45
pig0038: 還是塊陶吧 12/16 15:45
pig0038: 我猜你們公司還停留在 java7,用 lambda 他還不馬上罵髒話 12/16 15:46
superpandal: 工作就是看上頭爽不爽 能不能接受 如果上頭喜歡這樣 12/16 19:33
superpandal: 你不爽也得用 這是雙方面的 但如果這都不能講那也就 12/16 19:34
superpandal: 沒有所謂的溝通 基本上都有一些公司所謂的溝通是這樣 12/16 19:35
superpandal: 很想講這不叫溝通好嗎 12/16 19:36
dalbuhr: 說難讀的應該是文盲吧 12/17 00:06
Dnight: 難讀懂的應該是說這種寫成一行吧 result=a?b?c:d:e?f:g 12/17 11:56
Dnight: 不是說看不懂,但是寫成if else要看懂比較快阿 12/17 11:58
wild0522: 程式要寫給別人看懂,不是自己 12/17 16:51
pooznn: 單純 判斷0、1寫一行可能大家比較能接受 不然改起來很麻煩 12/17 17:27
ku399999: 那表示說難讀懂的連表達都不會啊 那叫多層的難讀懂 12/18 14:07
tp6m4xup6: 不用省行數 12/19 10:34
MephistoH: 不要太長的變數或裡面又有巢狀3元判斷... 12/19 13:23
chupiggy: 最近看Software Engineering at Google 作者就有講G社 12/19 22:49
chupiggy: 內部就避免這種使用,因為你的code會被其他team閱讀 12/19 22:50
chupiggy: 應該要讓其他人對你的code一目瞭然,炫技不是第一要務 12/19 22:51
pokemonmen: 還好吧 python 不用這個我反而看不懂 12/20 00:21
zenuo: 看你的條件內容是怎樣 12/20 09:46
sugaryeh000: 有些人為了炫技寫到整個code是很短沒錯但可讀性爆低 12/22 07:54
sugaryeh000: 比長code還難開發 12/22 07:54
sugaryeh000: 團隊開發遇到硬要拿leetcode上面那套炫技手法來寫cod 12/22 07:57
sugaryeh000: e的很痛苦 12/22 07:57
sugaryeh000: 有時候多個一兩行就會好讀許多卻硬要為了少那一行把 12/22 07:58
sugaryeh000: 整個code變的很詭異 12/22 07:58
Isaea: 我覺得不要裝B乖乖寫多行一點,註解多一點詳細一點 12/22 12:10
CloudyWing: 我有點好奇巢狀三元可讀性有很差嗎?我常寫沒覺得有 12/23 01:14
CloudyWing: 閱讀問題?還是你們看到的巢狀三元都用換行縮排來排 12/23 01:14
CloudyWing: 版? 12/23 01:14
CloudyWing: 都沒換行縮排來排版 12/23 01:15
fatb: 我覺得是習慣問題 code style也是內部講好就好 12/23 16:29
fatb: 另外能把code寫到人家看不懂也是你的本事 12/23 16:31
andy831020: 看con 很直觀可以 稍微需要想的就不要 看很快的時 12/24 00:00
andy831020: 候很容易想錯 ex err == null ? 12/24 00:00
lovetzuyu23: 看不懂就請他寫註解 12/25 01:30
Acetoxy: 我覺得寫三元沒比較厲害 12/25 22:34
polola6212: 重點是有沒有辦法讓人比較快看得懂 12/29 16:17
polola6212: 這種簡單情況下的東西,挑人的code style 根本呵呵.. 12/29 16:17
polola6212: 真的要強維持,自已寫東西進 code style checker啦 12/29 16:18
a123232: 邏輯簡單,三元很好看懂,複雜就不要 01/04 01:09
firingmoon: 花1秒和花3秒還是有差 01/04 11:01
wu0h96: 我也遇到一樣的 資深工程師跟我說太長可讀性低 01/20 01:33
dein0522: ternary那麼簡單,居然還可以討論這麼多= = 01/24 07:07