看板 C_and_CPP 關於我們 聯絡資訊
完全不能理解 if else 會比 switch 好的原因在哪。 可讀性不管怎麼想都是 switch 比較好(其實這連想都不用想吧) 這是程式碼對於本身的意圖的表達能力的問題。 就像是雖然我們用 while 可以作到 for 的事,兩者可以互換, 但是一般我們跑「某預期次數的迴圈、或是迭代某個容器」的時候就會去用 for, 而 while 會在「重複執行直到某條件成立」的狀況下。 也就是說,閱讀程式碼的人,在看到 for 的時候, 就會預期此段程式碼是用來處理「某預期次數、或是迭代某容器」的功能。 而在看到 while 的時候,就會預期這段程式碼是用「重複直到某條件成立」 這種程式碼才叫做「可讀性好」,不是程式碼短就是可讀性高, 如果你的程式在此時的行為,就是一個符合 switch 模型的行為, 那用 switch 才是對的,因為別人看到這段程式就知道這段程式碼的意圖。 更別說用 switch 讓編譯器有機會在這邊可以進行最佳化。 這段程式碼,不管在機器看還是在給人看的角度,都應該使用 switch。 我不知道現實世界是如何, 不過你夢裡面那位主管的程度顯然是比你好的, 如果你的夢短時間內不會醒的話,敝人的建議是他說啥你就照辦, 因為依你目前的程度來說,顯然他可以讓你學到東西。 當然如果以後他又說了什麼不甚理解的話,也歡迎繼續上來尋求解釋。 另外關於 hash 的問題,雖然個人覺得這是很不錯的方案, 但是既然夢裡面貴公司寫的是對時間空間都很要求的系統程式, 那在只有十個 case 的現下在這個狀況,敝人建議用 switch 就好。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.113.158 ※ 編輯: yoco315 來自: 118.160.113.158 (05/15 18:19)
tinlans:老實說,我比較好奇原 po 整個程式分成幾個檔案來寫。 05/15 19:07
tinlans:因為他好像很在意 source code 膨脹這件事。 05/15 19:08
andyjy12:我碰過的情況,for 比while 快不少.. 05/15 21:11
VictorTom:其實source code膨脹不是問題, 規模大的程式沒什麼理由 05/15 23:29
VictorTom:在意else if/switch這種差常數行的問題; 推y大說的, 重 05/15 23:29
VictorTom:要的是程式碼對於意圖的表達能力:) 05/15 23:30
tinlans:3F 的問題很容易解釋。其實並不是 for 跟 while 的差別, 05/16 03:58
tinlans:而是 compiler 有沒有辦法在編譯期知道 iteration 數。 05/16 03:58
tinlans:如果寫 for(;;) { ... } 這種的保證跟 while 一樣慢。 05/16 03:59
tinlans:其實不管你 C 寫 for 還是 while,在 compiler 看來都只分 05/16 04:00
tinlans:三種類型。1. iteration 數已知。2. iteartion 數未知, 05/16 04:01
tinlans:但確定 loop induction variable 是哪個。3. 都不知道。 05/16 04:01
tinlans:1. 和 2. 都叫 DO-LOOP,3. 稱做 WHILE-LOOP。 05/16 04:02
tinlans:其中 WHILE-LOOP 是最難最佳化的。而 WHILE-LOOP 並不是你 05/16 04:03
tinlans:在 C 寫了 while 就是,也不會因為你寫了 for 就不是。 05/16 04:03
tinlans:是哪種完全取決於 loop 實際上的特徵。 05/16 04:04
VictorTom:再推t大解釋:) 05/16 13:28