看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Killercat (殺人貓™)》之銘言: : 「前陣子我們從我們的外包商那裡看到了一份實在是爛到爆炸的C++ code。這東西平均每 : 行出錯率實在是真他媽的高,而且他的寫碼風格讓我們越看越想咒他老母。不過,這種 : What the fuck的感覺,到我們看到這組code的時候達到了最高點。」 : while(true) : { : if(mainType == 7) : { : subType = 4; : break; : } : if(mainType == 9) : { : subType = 6; : break; : } : if(mainType == 11) : { : subType = 9; : break; : } : break; : } 手癢回一下文, 要是我會將上面寫成: switch (mainType) { case 7: case 9: case 11: subType = mainType - 3; if (mainType == 11) subType++; break; default: break; } 而且是一開始就會這麼寫 : --- : 感想 : 工程師再美國混口飯吃似乎真的很容易? XD ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^好像真的是喔~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.198.185
ledia:感覺這樣更糟 @@ 02/04 11:17
ledia:要就一一對應, 不然之後 maintain 的人還要看過所有的計算 02/04 11:18
ledia:才知道要怎麼加新的 case 才不會有 side effect 02/04 11:18
adrianshum:同意樓上. 簡簡單單的 switch case, 每個 case 寫對應 02/04 11:35
adrianshum:的 subType = 什麼, 就簡單又易明白了 02/04 11:35
tomnelson:一對一對應也行呀!那是最一開始會寫的,但是最後程式不做 02/04 12:16
tomnelson:任何修改時,我才會寫上面回文的程式出來. 02/04 12:16
tomnelson:會使用subType = mainType - 3;是想表達出,當資料有規則 02/04 12:17
tomnelson:性出現時,可以考慮的作法,不是這樣做會比較好或不好. 02/04 12:18
tomnelson:其實這種問題真的"見仁見智". 02/04 12:19
VictorTom:case 7和9是ok, 但是case 11獨立出去會比較好吧@_@" 02/04 12:31
adrianshum:如果真的有規律當然好, 問題是最後那個 02/04 12:31
adrianshum:if (mainType == 11) subType++; 02/04 12:31
adrianshum:三個 case, 只兩個有 "規律"... 然後硬把三個 case 放 02/04 12:32
adrianshum:在一起, 這種 "規律" 真的看死人 02/04 12:33
adrianshum:還有其實真的叫 xxxType, 用個 enum 或 constant 大家 02/04 12:34
adrianshum:看起來總比一堆無意義數字容易理解得多 02/04 12:34
tomnelson:對,樓上你要說的剛好是我剛想到的,但是不宜在這篇討論下 02/04 12:50
tomnelson:去了,使用這種"magic number(s)"的程式本來就不好. 02/04 12:51
tomnelson:還有樓上你的回文點出了原po要說的重點,是那while loop 02/04 12:53
tomnelson:喔對了,回一下VictorTom大,要是我規劃的話,應該也不會讓 02/04 12:56
tomnelson:case 11出現,也就是說case 7/9/11都是mainType - 3,所以 02/04 12:57
tomnelson:這裡引出一個觀點...寫程式前的規劃與規格書很重要,不過 02/04 12:58
tomnelson:寫軟體的都知道,計劃永遠趕不上變化,變化比不上老闆一句 02/04 12:59
tomnelson:話,所以呢?以這種程式區塊而言,保持switch case裡的一對 02/04 13:00
tomnelson:一方式反而是最佳解 XD! 02/04 13:00
VictorTom:嗚嗚~~有時候不是所有事情都可以自己決定規格掌控的Q_Q~ 02/04 13:10
VictorTom:昨天幫同事看一個struct/union的問題, 我們用bit定義了 02/04 13:11
VictorTom:對應HW Reg的setting, 結果HW開了某個鳥Reg用3 bits卻跨 02/04 13:11
VictorTom:過兩個DWORD, 一個在尾2 bits, 接到下一個的頭1 bits, 02/04 13:12
VictorTom:導致算出來sizeof應該4個DW變成5個DW; 對那些bits對了半 02/04 13:12
VictorTom:天, 加掛debugger才找到問題, 這也是讓人想喊WTF啊>_<# 02/04 13:13
ledia:各人是覺得, 就算有規律, 語意上是 xxxType 的東西也不應用 02/04 14:15
ledia:運算的方法來求得, 一來如先前說不好管理, 二來整個程式的 02/04 14:16
ledia:邏輯會變得很不直覺 (各人->個人) 02/04 14:16
ledia:都已經用 switch 了, 不必要省到全都擠到同一個 case block 02/04 14:17
ledia:不然你就不要 switch, 不要 if, 也不要 while, 直接運算就好 02/04 14:17