Re: [討論] 寫三元判斷式code review被打槍
這邊不針對效能,也不針對說階層太多,應該用什麼方式重構之類的
只是看到有人提到巢狀的三元運算子,閱讀性太差,應該改回用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 導致有情況沒指派到值
--
有
閱讀性差很多好嗎.....
原Po認真? 明顯一閱讀性比較好
老實說我也是覺得明顯一比較好啊 只是看前面文章和推文,想說講差不多來測一下風向 XD
:(
這種情況兩個都不適用,重寫好嗎
覺得差很多
寫成波動拳最棒
通常會拆開多層 常遇到的問題是每層裡的程式碼一長串
如果裡面都是這種簡單內容其實都OK
這種case 我會寫成function,把巢狀結構攤平,增加可讀性以
及維護性
實務上來說我也是會用 Array Map,或是拆成 Function 來攤平巢狀結構 大部分的情況下寫到兩層就是極限 而且真寫成巢狀,以這案例會在 Condition 加 Not 來對調順序 所以從推文來看,問題點不在巢狀三元,而是只要是寫成多重巢狀都不好閱讀 有些情境在相同結構下,反而有人會覺得改寫 if else 卻降低可讀性
差很多==
Condition 加個 not 就可以攤成平的了...
就看到前面說巢狀三元可讀性劣於if else 所以故意寫一個很醜的結構來看一下相同結構下,是否真的三元比較難閱讀 XD
你這例子看起來(一)比較好懂
但實際上每個判斷式裡的function變多的話,就是(二)比較好
都很醜 拆掉好嗎= =
你看看你在說些什麼 XD
都超醜
寫成巢狀是wtf…
醜到流湯 而且這串為啥要一直討論啊 啊就看自己公司規
定啊 幹嘛一直洗
你的錯覺
舉一個正常人都會攤平的例子真的有效嗎?
我認真說,如果是專案公司,你可能高估了正常人的水平了 多的是能動就好(嘆氣 以我的經驗,我之前同事如果修改要在 if 內部加判斷就直接加了 多半不會條件反轉 另外 else if 本身就是巢狀的,有些程式語言本身沒有提供 else if 語法 它們的 else if 是以下程式碼排版後產生看起來攤平的效果 if (condition1) { } else { if (condition2) { } } 而且兩種寫法都反轉後,if else 也真未必有比較好閱讀 例如: 三元運算子: int i = condition1 ? 1 : condition2 ? 2 : condition3 ? 3 : 4; if else: int i; if (condition1) { i = 1; } else if (condition2) { i = 2; } else if (condition3) { i = 3 } else { i = 4; }
用function的話 會影響效能
我曾經看過寫成這樣的可以當主管,聽說一年一百多,
顆顆
function造成的效能影響通常不大
在某padle效果器,if-else + function 的效能就差很大了
幹死老闆硬要用效能很差的MCU
*pedal效果器
if else 有比較好閱讀
chatGPT:他們在吵什麼
三元在硬體語言如VERILOG在邏輯電路寫法上比較方便
畢竟硬體用goto很正常 到軟體就可能被罵
goto js 很常見
拜託別用第一種寫...
兩個寫法都很爛,請用guard clauses
剛 Google 一下,Guard Clauses 我也很愛用 只是我之前不知道它叫 Guard Clauses
什麼語言沒有 elseif 且沒有替代品
這邊來說明一下 else if 是怎麼來的 1. 完整程式長這樣: if (condition1) { } else { if (condition2) { } else { } } 2. 我們已知 else 後面只有單行可以不用加大括弧,而 if else 語句將之視為一個單行 所以我們將第一個 else 的大括弧去掉變成以下這樣 if (condition1) { } else if (condition2) { } else { } } 3. 最後再用排版將第二個 if 放置在第一個 else 後面,else if 就誕生了 if (condition1) { } else if (condition2) { } else { } 所以我前面說 else if 本質上還是巢狀結構,只是靠排版攤平 不過有些程式語言像 PHP 是真的有提供 elseif 這個關鍵詞
guard clauses+1
寫那樣 SonarQube 會叫
if else一定要弄三層?寫法一也很討厭
本文一開始就加一堆但書,並註名只是舉例,非實務上的寫法 XD 實際上當然是 Array Map、Function 和 Guard Clauses 等方法來優化寫法 XD 推文提到的比較好的寫法,才是我實務上真正在寫的 大部分情況我最多只會寫到兩層,且不會用成波動拳結構 我只是因為前面文章有推文提到巢狀三元運算子容易漏看,且不好閱讀 而改回寫成 if else 關於容易漏看這部分我是疑惑為什麼會容易漏看 至於可讀性部分,兩種方法當然都很糟 但看起來也不是每個人都認為巢狀 if else 可讀性優於巢狀三元運算子 實際上真正影響閱讀的多層巢狀這件事,真的多層巢狀起來 if else 和 三元運算子都不好閱讀
※ 編輯: CloudyWing (203.204.160.44 臺灣), 12/28/2022 23:35:33巢狀的三元會是一場災難...腦袋要轉兩次@@
就是習不習慣的問題啊= =
1、2的可讀性其實根本一樣 就是習慣問題
說巢狀難讀的是指全寫在一行 沒像你這樣排版的
有的還是JAVA + HTML + JSTL 組出來
覺得寫法1比較困難閱讀的原因是沒括號又少見,要稍微想
一下。if else雖然縮三層很煩但不太可能看錯。會寫出這
種code的話排版大概也不會都排的跟你一樣,要多花一下時
間找冒號,個人感覺啦。
實務上都還是會用formatter吧,review時不會看到這種特殊
排版
高手
自己舉的例看不出差別,有點可怕
高手境界
你的例子,我覺得可讀性差不多,但我會寫2
如果說以後這段都不改,就沒差,會被改2我覺得好一點
中斷點也好下一點
可讀性本來就要根據現實情況做判斷
跟你說怎樣一定好的,多數是見樹不見林
老實說 只要沒事先規範兩個做法我都會接受 如果都只看自己愛
看的code style那接手到爛code或者工作需要得去看別人的code
能保證都是自己要的寫法?
第一種寫法用反邏輯別縮排
cd1?1:(換行)cd2?2:(換行)...(cdn)cdn:n:m
曾在verilog語法看過類似排版
更正cdn?n:m
巢狀三元分沒有明確分界線 需靠排版維持 即使不討論是否
好讀 巢狀三元更難改也是不爭的事實
php 現在都用 ?: 跟 ?? 香~
第一種看到會想吐吧,寫多層判斷就很噁心了,再寫成這樣
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寫)
40
[問卦] 程式能寫if 就不要用for loop?以前寫程式覺得要看起來厲害 明明能用if的 我會先建一個table 然後再用for loop尋找 好處是數量增加時增加的程式碼少 壞處是寫的時候和以後回來看的時候比較麻煩25
[心得] 數位IC設計面試心得(代PO) 手機排版傷眼請見諒 近期面試了多個數位IC設計的職位 常受惠於ptt 的資訊,因此決定來回饋一下 以下幾乎為板上經常拿來比較的那幾間公司所問的題目16
Re: [請益] 為何升三息 美股卻是往上噴?所以今天的美股解答到你的疑惑了嗎?? 劇本跟5/5號FED宣布升兩碼一模模一樣樣 還好上次被騙過一次這次沒被騙 順便抱怨一下已反應這個詞 今天早上很多人在說什麼已反應啊or股市不會等真的升息才反應啊~9
Re: [討論] 寫三元判斷式code review被打槍"特定"情況下的確是好方式 舉個例子 以前我在調校能時候有用過這種方式 這是c#的code部分節錄 void Mem_w(ushort address, byte value) { if (address < 0x2000) NES_MEM[address & 0x7ff] = value;