Re: [討論] 寫三元判斷式code review被打槍
※ 引述《unixxxx (皓皓)》之銘言:
: 隨著語法的進步
: 很多會寫 code 的人都很少寫判斷式了
: 不管是三元還是 if else
: 寫太多的判斷式
: 如果….所以…否則…如果….則又…如果..
: 很不好閱讀
: 很多Javascript 高手都是用 switch 取代
說到switch,想來問問你各位公司的code style是下面哪種
(1)
switch Var1 {
case a:
xxx
case b:
xxx
default:
xxx
}
(2)
switch Var1 {
case a:
xxx
case b:
xxx
default:
xxx
}
差別就在case跟switch是不是對齊階層
老實說讀書時學的習慣是1
公司的code style是2
本魯到現在還是沒有很習慣
不知道到底比較約定俗成的style是哪種
--
老婆1 https://i.imgur.com/VBSwkje.jpg 老婆2 https://i.imgur.com/wdMQImg.png
--
都不是 應該空兩格就好
1沒有+break會被電
啊手機縮排會跑掉 要用全版模式看才看得出差別
從來沒看過1
看整天才發現手機排版是一樣的,java switch沒加break我也
被弄過
有些比較新的語言預設不用break 減少新手踩坑的機率
回到本文 不同語言的慣例不一樣 現在不都有自動排版嗎
vscode autoformat按下去 那個就是你所謂的約定俗成style
從來沒看過2
Go跟Ruby的慣例是2
其他語言多數是1
哥你厲害,我就是寫go,原來是go的慣例XDDD
prefer 1
已經太細了...
2 cr 很痛苦 我一定跟上司打架
沒看過2
我是1 IDE自動排版是2 很猶豫要不要換 因為我case會加{}
如果用2會有點錯亂
不重要 照規定走 在乎這種問題沒意義
2
我習慣1不過是visual studio的預設自動排造成的
當然是1阿,VS ctrl+K、ctrl+D 就能自動排了
1
這兩個都沒關係,但沒有break會出大事...
這很重要嗎 format調一下很難?
1 是 visual studio style, 2 是 Linux kernel style
通常工作跟 Linux 有關的話,比較常採用 2
看到2會中風喔喔氣氣氣
我寫Swift的,Xcode的自動排版是2
都沒差,有 code formatter 的 IDE,也沒有完全相同。
慣例被制定到這麼深 有意義嗎?
記得..switch 底子裡也是 if else
縮排還好 讓IDE決定w
看到2會中風吧
Go有go fmt啊
不知道我問一下我家fmt
比較怕的還是IDE沒調整好自己跟自己打架 不然這種排版問
題真的丟給autofix就好 根本不需要煩惱
一個規則 左大括號的下一行要往內縮
給IDE自己排
Linux Kernel規定是2,但我自己寫的專案還是喜歡用1
Golang 2
現在幾乎都2了吧
1
我都沒看過
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 寫太多的判斷式 如果….所以…否則…如果….則又…如果..5
好啦 假設不是反串 我覺得滿有道理的 但有一點其實你說錯了 其實並不是語法進步 之前學 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;