Re: [語法] 無規則性固定數值輸入的處理方式?

看板C_and_CPP作者 (眠月)時間15年前 (2010/05/15 18:18), 編輯推噓3(3014)
留言17則, 3人參與, 最新討論串6/7 (看更多)
完全不能理解 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)

05/15 19:07, , 1F
老實說,我比較好奇原 po 整個程式分成幾個檔案來寫。
05/15 19:07, 1F

05/15 19:08, , 2F
因為他好像很在意 source code 膨脹這件事。
05/15 19:08, 2F

05/15 21:11, , 3F
我碰過的情況,for 比while 快不少..
05/15 21:11, 3F

05/15 23:29, , 4F
其實source code膨脹不是問題, 規模大的程式沒什麼理由
05/15 23:29, 4F

05/15 23:29, , 5F
在意else if/switch這種差常數行的問題; 推y大說的, 重
05/15 23:29, 5F

05/15 23:30, , 6F
要的是程式碼對於意圖的表達能力:)
05/15 23:30, 6F

05/16 03:58, , 7F
3F 的問題很容易解釋。其實並不是 for 跟 while 的差別,
05/16 03:58, 7F

05/16 03:58, , 8F
而是 compiler 有沒有辦法在編譯期知道 iteration 數。
05/16 03:58, 8F

05/16 03:59, , 9F
如果寫 for(;;) { ... } 這種的保證跟 while 一樣慢。
05/16 03:59, 9F

05/16 04:00, , 10F
其實不管你 C 寫 for 還是 while,在 compiler 看來都只分
05/16 04:00, 10F

05/16 04:01, , 11F
三種類型。1. iteration 數已知。2. iteartion 數未知,
05/16 04:01, 11F

05/16 04:01, , 12F
但確定 loop induction variable 是哪個。3. 都不知道。
05/16 04:01, 12F

05/16 04:02, , 13F
1. 和 2. 都叫 DO-LOOP,3. 稱做 WHILE-LOOP。
05/16 04:02, 13F

05/16 04:03, , 14F
其中 WHILE-LOOP 是最難最佳化的。而 WHILE-LOOP 並不是你
05/16 04:03, 14F

05/16 04:03, , 15F
在 C 寫了 while 就是,也不會因為你寫了 for 就不是。
05/16 04:03, 15F

05/16 04:04, , 16F
是哪種完全取決於 loop 實際上的特徵。
05/16 04:04, 16F

05/16 13:28, , 17F
再推t大解釋:)
05/16 13:28, 17F
文章代碼(AID): #1BxdJwix (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BxdJwix (C_and_CPP)