Re: [討論] 寫三元判斷式code review被打槍
最近公司讀書會在看 Martin Fowler 的 Refactoring,
大概第九或第十章他有用到三元
sample code 大概是這樣
const price = summer()? summerPrice() : commonPrice();
然後我們有看這串文章討論了一下
討論的結果是,我們覺得三元比較適合用在 "單純,且明確是非 A 即 B 的情況"
ex const desc = score > 60? "及格" : "不及格"
而像上面 summer 的情況則比較不適合,
因為一年有四季,需求調整改著改著就變巢狀了,
除非公司有明確的規範及 review 作業流程
而為了避免各種認知差異衍生的麻煩,直接禁用也是合理的
以上,剛好最近也有討論到
※ 引述《a88241050 (再回頭已是百殘身)》之銘言:
: 小弟寫java的
: 以前常常寫三元判斷式
: 就比如說
: String a;
: if(con) {
: a= "aaa";
: } else {
: a="bbb";
: }
: 這樣就要佔掉六行
: 所以我通常都是寫
: String a= con ? "aaa" : "bbb";
: 從五行變成一行
: 在我看來簡潔又方便
: 但最近給一個資深前輩code review的時候
: 他說不要用三元判斷式
: 因為不好閱讀
: 他工作那麼久也從來不用三元判斷式的
: 而且java有很多套件都可以用來取代三元判斷式
: 所以用三元判斷式真的不好嗎?
--
這是最恰當的用法
那個就是bool 你舉switch 的case 造你這說法 if 也要禁
用
說到 if else 剛好也在同一次講到,書中一段將許多 if 轉成 guard 的部份, 我翻了一段有大量前置條件要判斷的 code if ... return ... 十幾個 early return 加一加也 50 行咧 不過又沒有將它們轉成 guard 的動力, 另外禁用這詞可能太嚴重, 或許該說是盡量避免容易讓程式變複雜的做法, 以及多在動手前先想想有沒有更好的做法
不懂你說的guard是什麼意思,Early return另一個名稱不就
是guard clause?把n個early return變一個?
沒有profile就做最佳化等於是浪費機會成本..
是再包出去當後端 api 的 filter/guard 的意思,會再讓主要項目明確一點, JAVA/PHP 叫 filter,nodejs 的 express 算 middleware, nodejs 的 nestjs 有個 Guard (目前在寫 nestjs) 或者也可以包一個 validate/guard function/class 出去 跟效能無關,算是程式格式編排的調整, 目前是 50 行的 guard clause 後面接著 20 行的主要行為, guard 比行為本身還多 XDD 但是包出去就得處理中間共用變數的傳接,有點花大工做小改善的感覺, 所以不太想做
推明確非A即B的情況+1
不懂這有啥好吵 規定特殊寫法一率註解就好了啊
要秀可以 麻煩註解 done
同意沒什麼好吵的,別人的意見當參考就好, 就好像有一種餓叫阿罵覺得你餓, 有一種單純叫 Martin Fowler 覺得單純,還覺得很不錯寫進書裡推廣, 可是有些人覺得不要用比較好 選擇適合自己的做法就好
※ 編輯: lovdkkkk (114.37.196.215 臺灣), 12/27/2022 23:33:34樓上不是,你會說的沒啥好吵的,是因為只要有一套「
統一做法」那就不會有爭議,但現在的問題是如果要有
一套統一做法,那是哪一套?統一做法能解決大家都知
道,有爭議的是該用哪個做法來統一
95
首Po小弟寫java的 以前常常寫三元判斷式 就比如說 String a; if(con) {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寫)