[討論] 寫三元判斷式code review被打槍
小弟寫java的
以前常常寫三元判斷式
就比如說
String a;
if(con) {
a= "aaa";
} else {
a="bbb";
}
這樣就要佔掉六行
所以我通常都是寫
String a= con ? "aaa" : "bbb";
從五行變成一行
在我看來簡潔又方便
但最近給一個資深前輩code review的時候
他說不要用三元判斷式
因為不好閱讀
他工作那麼久也從來不用三元判斷式的
而且java有很多套件都可以用來取代三元判斷式
所以用三元判斷式真的不好嗎?
--
大部分情況都會變更難閱讀
不會耶我覺得還好,不要有巢狀連續判斷的話我能接受
。
如果短的話算很好讀吧
看情況,如果確定只會是簡單狀態變換就沒差,但如果以後會變成a
re a2 a3,b1 b2那我甘願一開始就用括號寫
缺點多多
邏輯簡單或是很短的方法裡面用短的三元OK
其他地方就有人會看漏
有些團隊是避免爭論所以完全禁用,所以不要用最省事
consistency 最重要 如果原本 codebase 就沒有用它就
不要用
code style有規定就別用,大家一致
不一樣的東西吧 三元運算有回傳值
判斷單一ok 不要判斷>2個就好
就怕嵌套多層,跟鬼一樣,看那一堆冒號直接中風
佔掉六行真的沒那麼誇張… 不然 IDE 也可以處理
如果有參與開發的任何一個人不懂,那就不要
這種比較簡單的 真的沒甚麼好避免的
要:多:潮:有?多?巢? ;問回傳值為多少
要看實際例子才準
目的是利於閱讀吧 行數根本不是重點
如果只有二元判斷那還好 如果是多重判斷 寧願你寫if el
se 甚至seitct更為好讀
switch
程度不好還學人review 啥小,可憐喔
他的問題
if else 加 log 方便,擴展邏輯也方便
ternary 除了少打幾個字以外有啥優點?
你可以用 String a; a = "bbb"; if(con) a = "aaa";
這樣只要四行,不過三元還是比較方便啦,不要三元裡面
又塞三元就好
遵守團隊規範
現在各種dis同事長官
一層可,多層不要
佔6行沒那麼嚴重,以後隨需求擴充或調整,code亂長更麻煩
if-else裡面只有assign一個變數的話 很ok啊
三元盡量只用一層就好
你這個例子沒啥問題,有問題的是像這種
a = a > b ? a : b > c ? b : c
三元套娃算是很嚴重的bad smell
喜歡if else
行數還好,但長度最好注意
我覺得 if else 人眼閱讀速度較快
考量到未來異動彈性,及閱讀性
看你公司有沒有規定coding style 啊
沒有絕對的對錯 看誰比較大就聽誰的
推Killercat的例子,用太多層就有點討厭了
單純的T/F就算了,但是就是有人會繼續接下去寫。三元判斷裡
面再接一個三元判斷,所以建議少用。
如果寫成三元會太長我就會考慮改寫法
不會比較好懂+1
別鬧了,MSDN 一大堆三元運算
真的討厭「?」
if else 一票,除非公司現在和未來都是找高手
有註解傳回什麼就好 基本不會去追內層
不要巢狀還好吧?
容易變得難閱讀,真的覺得很多行用function 包起來
你不會問他推薦怎麼寫再拿上來給大家比較哦
短的很好讀啊,不然就加個註解
用function包起來+1
簡單的情況可以用 不過規定不要用就別用
個人真的建議不要用.但是上班當狗就要聽老闆的
我喜歡用,有時候會 讓程式變得好閱讀
有沒有人看過這樣寫的 var temp = con ? this.a() : thi
s.b(); 看到這種有點不知道該不該給他過
簡單時好用,太複雜不好,但怎樣算太複雜每個人都不一樣
不要巢狀 就可以 之前同事寫過巢狀 傻眼qq
我覺得寫這個都不行的大概也不能接受lambda
Ninja Code?
不過公司有Code review與coding style規範還是好事……
兩層就寫啊 寫太多層才會不知道幹嘛 而且應該要包起來
要看多長
不要巢狀
讀到這段如果花了一秒以上理解 就要重構
老實說這算基礎吧
看團隊規範啊 有 coding guideline 就照規定走
沒規範就先寫個 guideline
私以為,一個東西會存在就是有它的用處,適合的時候就用適
合的方法,極端的只用或不用都只是一個對自己有利的借口罷
了。
談到 coding style 話語權才是唯一真理
Indeed,只有Lead字輩,才能決定Coding style。
看三元判斷式裡面的內容
如果你的條件很長而不是單純的if a=b這種
那的確就會難閱讀
你是對的
這怎麼不好閱讀??
寫法就討論 團隊都能配合就好
尚未看到好的回答
蠻常見到新人會煩惱,像是看到前人的用 if-else if
蓋個20幾樓,納悶怎不用 switch-case 重寫這類的
問題,經驗上,我認為重構效益大於局部寫法修正,
看得懂且性能差異不大的話別糾結太多
通常我是左式ok就不care右式 除非右式內容常常改再分出來
原po 提得狀況,我認為可以使用,但如果是 String
a = cond1 ? "a" : (cond2?"c" : "d") 這種還是展
開來寫比較好
你這個case寫if else的我會叫他改成三元
以可讀性來說,肯定是不行的
多層別用三元,但用if else也不好看,要包function用e
arly return
其實我是覺得是那個資深前輩看不懂,如果一開始是很簡單的
兩個簡單條件就還好
出事誰扛責任就聽誰的
對於一層判斷+assign 三元可以一眼就知道要做什麼 熟悉
這種寫法後 讀if-else的負擔還比較大一點點
你前輩的理由沒有說服力 以這例子來說並沒有較難讀
但如果你團隊裡看code的都像你前輩這樣 那還是別用
如果有商業邏輯,寧願分清楚不要省行數
宗教問題 不會有結論
能力太差的才會看得慢 高手都是這樣寫才快
你是 owner 爽怎麼寫都行,不是那就人在屋簷下,我自己
是蠻喜歡三元的
看到很多人連出現三元都不行我還蠻驚訝的 但照團隊規範
走也很重要
不用驚訝, 80/20法則 業界不是學校, 也不是在比行數
不用省行數 ~
重點是看起來怎麼樣
除非向lamba那種重於流程表達的寫法,不然你一般判斷簡寫
沒啥差,判斷太複雜難看,判斷簡單就只是自己看順不順眼
看了很煩@@
這種短短都沒差,最怕是超過兩個螢幕寬度的三元...
邏輯都一樣,易讀性差很多,我會選擇易讀性
行數不是重點,重點是整個團隊易讀好維護可擴充
今天再來個ccc條件,你怎麼辦?還不是要if else或when
可讀性跟效能才是最大重點 其他都次之
所以他推薦怎寫? 有很多套件可以取代,可以舉例一下嗎?
跟你前輩溝通看看 簡單易懂的三元沒啥問題
只有一層感覺還好
寫扣本來就是好維護第一
(condition) ? "YES" : "NO" 這種很好用阿 要取代真的
是要多好幾行code 看了就阿雜
就跟goto很好用 改用if-else就是要多好幾行
我以前也因為這樣常被擋
不過其實應該只是為了 整份coding style 統一而已
這種被擋還好啦,style 問題都最好解決
最難解決的是思緒問題,每個人對pattern 喜好不一樣
這種觀念差異造成mr過不了。才最頭痛
公司就是降...你寫的程式要讓不同智商的人能看懂...
題外話,python 的 list comprehension 大家的見解是?
個人2層以內接受。但是2層已經不太好讀了
很多發明就是要1行:list.first(x==1).first(x==2)...
拆開來寫感覺就很弱
perl系列的可以忽略這串XD
if else也可以寫成一行啊,呵呵
有規範照規範,沒規範不刁難
變得很難讀很痛苦
三元都看不懂是文組吧==
goto現在c++23有scope_exit可以用啊
喔等等這串java
一層可以,多層不要,話說你們是沒有更重要的東西
可以review了嗎…
選幾個估狗查東西時看順眼的 blog 爬他們的文章學跟練
或者歷年鐵人賽評價高的找有興趣的爬
回錯篇 0rz
他大概是覺得未來會變多層
你這case單層賦值蠻適合用的
你這個例子不用三元 之後會有人搞到a變成 null referen
ce
有時候用三元判斷式是為了RAII
省行數可以幹嘛?空白行都拿掉不是更省
寫長一點真的很難看
還好啊 看團隊而已
你這樣很容易就超長 笨方法
三元用習慣很簡潔吧...
真的是宗教問題
老鳥太弱了,叫他做leetcode,leetcode十分常用三元
短的一層可以,多層不要+1
三元很好用,可以用的很漂亮
三元判斷式若把一堆條件寫成超出螢幕的一行,之後也是得拆
分問號冒號一行一行來維護。
如果遇到那種三四個判斷式用一行三元判斷式實現而且沒有括
號的,這種得非常小心,因為後續若要擴充功能很容易出事。
當然最精彩的就是把巢狀用一行三元判斷式搞定
單層沒啥問題 蠻常用的 多層三元在debug容易造成困
擾
該拆的還是要拆
這種小事居然可以這麼熱烈討論
一層可 常用的話會反射動作 秒讀懂
多層不要
要是只有一層又沒提前講好就他問題,顆顆
這件事你上級主管說什麼就說什麼 sideproject你自己爽
就好
*說什麼就是什麼
每間都不同,沒什麼對錯。google或speing程式碼在你們c
ode review會過嗎?
code跑起來沒問題,幫你maintain的人閱讀起來沒問題,
那就沒問題。沒有對錯。協同合作不是寫一些自己爽的然
後別人痛苦的事情。
字面簡潔 可是腦袋要多轉一圈 = 思緒不簡潔
看規定
除非是團隊共識,不然一般不用
可以用,邏輯簡單的話不影響readability
一人專案,團隊=我決定
拜託去看clean code好嗎
java已經夠囉唆了 一兩層三元還可以 以前我剛入行都
被這樣推薦 但是業務邏輯多了就知道無腦if else的壞
處 如果是golang我可以接受沒三元 本身就比較簡潔
沒寫過前端語言吧 前端模板一堆這種東西
你現在是在工作,不是自爽
就跟一夜情一樣,講好就好了
糟糕,我很常寫巢狀的三元,不過有換行排版應該還好吧
拆開比較好放中斷點
你前輩就是屬於永遠不會碰 GO/kotlin 的那種人
還是塊陶吧
我猜你們公司還停留在 java7,用 lambda 他還不馬上罵髒話
工作就是看上頭爽不爽 能不能接受 如果上頭喜歡這樣
你不爽也得用 這是雙方面的 但如果這都不能講那也就
沒有所謂的溝通 基本上都有一些公司所謂的溝通是這樣
很想講這不叫溝通好嗎
說難讀的應該是文盲吧
難讀懂的應該是說這種寫成一行吧 result=a?b?c:d:e?f:g
不是說看不懂,但是寫成if else要看懂比較快阿
18
三元不能用 算還好了 我還遇過 a=1; ... ...11
Code review 檢查這些會有點太花時間,應該有更重要的東西要看。 可以用一些 Gradle plugins 卡在 CI 比較省事: 1. Checkstyle 顧名思義檢查 style。 2. SpotBugs12
從 C++ 的角度來說 三元運算子有機會改變 l-value/r-value 的性質,進而破壞最佳化 舉個簡單例子 可以看到用三元運算子的時候,回傳區域變數竟然要 copy 而不是 move 雖然說 Java 沒有這些5
沒有 沒有什麼公認 要解決coding style 最好的辦法就是CTO大頭召集全部RD開會 把這間公司的coding style全都記下來8
這種事情 不就和阿里巴巴一樣 一開始給大家一本手冊 哪些code 或是哪些style在本公司不要出現1X
隨著語法的進步 很多會寫 code 的人都很少寫判斷式了 不管是三元還是 if else 寫太多的判斷式 如果….所以…否則…如果….則又…如果..24
說到switch,想來問問你各位公司的code style是下面哪種 (1) switch Var1 { case a: xxx5
好啦 假設不是反串 我覺得滿有道理的 但有一點其實你說錯了 其實並不是語法進步 之前學 Rust 覺得哇 pattern matching 真是他媽神 好潮喔 後來跑去學 OCaml 我才發現(Rust設計者是OCaml粉 一開始的compiler就是用OCaml寫)9
"特定"情況下的確是好方式 舉個例子 以前我在調校能時候有用過這種方式 這是c#的code部分節錄 void Mem_w(ushort address, byte value) { if (address < 0x2000) NES_MEM[address & 0x7ff] = value;
爆
[問卦] 真的發(發錢)(發錢)(發錢)測試他判斷式怎麼寫 看會不會三連推 之所以會用(發錢)而且秒推大概是看準板主發文? 本來想說有沒有什麼case可以給他卡死 但這機器人條件應該設的很簡單52
Re: [問卦] EXCEL VBA值得花時間去學嗎認真回,學Python,然後 1. 把Excel資料丟到google spreadsheet上當關聯式資料庫用, 2. 用python pandas整理資料 3. 用datastudio做視覺化分析或定期觀察儀表板 這是我最推薦新手入門數據分析的工具組合。33
[心情] 什麼是真愛?什麼是真愛? 想到未來媽媽裡,那個斜槓青年(忘了名字哈哈)酒吧老闆兼軟體工程師,他對劉品言說: 「真愛不是一個對象。」接著,一段攏長的演說,也是很有道理,但我忘記在講什麼了。 有人認為,有些人剛認識的時候,就已經確定他是什麼身份。是戀人,還是朋友,是早早決 定的事。7
[問卦] 用if else敘述反對死刑但這個必須死各位大師下午好 昨天兩名警察領了盒飯 造就了有金句產生 從程式語言來看下面這句話 「我反對死刑但這一定要判死」