Re: [閒聊] 一個函式2000行, 一個if 300行

看板Soft_Job作者 (CHA)時間10年前 (2015/06/10 22:42), 編輯推噓11(11019)
留言30則, 15人參與, 最新討論串2/3 (看更多)

06/10 21:19,
我學的時候就叫我不要用了,有人可實際範例示範好處嗎
06/10 21:19
例子像這樣 https://gist.github.com/anonymous/5ea6b0d75808e00cf35f 雖然用if/else也可以,但真用下去會巢狀if好幾層 這例子還只有3個成員,如果struct內有10+個成員 你不會想寫10+層if/else吧 甚至某些成員還要用自己的init function 而這些init function又都有可能fail 我想沒人會想看那一大坨code吧... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.35.150 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1433947363.A.E31.html

06/10 22:52, , 1F
這種pattern的code最近看好多喔
06/10 22:52, 1F

06/10 22:52, , 2F
用 switch case + loop 應該也可?
06/10 22:52, 2F

06/10 22:54, , 3F
拿來當作try...catch的用法滿方便的
06/10 22:54, 3F

06/10 22:56, , 4F
這樣寫有一部份是可讀性考量~簡單明瞭
06/10 22:56, 4F

06/10 22:56, , 5F
switch case + loop就沒那麼直覺
06/10 22:56, 5F

06/10 23:13, , 6F
error handling 好用
06/10 23:13, 6F

06/11 00:06, , 7F
c function單一出口 該free或該close的resource都可
06/11 00:06, 7F

06/11 00:07, , 8F
以在出口處處理 避免leak....
06/11 00:07, 8F

06/11 00:40, , 9F
是的 思考切勿僵化
06/11 00:40, 9F

06/11 00:50, , 10F
這例子簡單明瞭
06/11 00:50, 10F

06/11 08:52, , 11F
寫C很可憐,又要避免resource leak,又要榨出最後一點效率
06/11 08:52, 11F

06/11 08:52, , 12F
,不用goto反而傷害可讀性
06/11 08:52, 12F

06/11 09:10, , 13F
應該說學習的時候還是別用goto..等熟練後再用比較好
06/11 09:10, 13F

06/11 09:39, , 14F
C/C++ 本來就不是給新手的語言
06/11 09:39, 14F

06/11 13:07, , 15F
這是頭一次覺得適合用goto XD
06/11 13:07, 15F

06/11 13:15, , 16F
我就是從linux kernel code 學會這個好用的寫法的
06/11 13:15, 16F

06/11 13:43, , 17F
我會覺得應該要說 當你對寫程式該注意的事情很熟後
06/11 13:43, 17F

06/11 13:44, , 18F
用goto是沒有關係的 可以讓程式簡潔便於維護
06/11 13:44, 18F

06/11 13:45, , 19F
請問用function或是function pointer取代不會比較好嗎?
06/11 13:45, 19F

06/11 13:52, , 20F
function會增加stack memory吧 function pointer我不懂
06/11 13:52, 20F

06/11 14:21, , 21F
事實上kernel driver的init/exit就是function pointer
06/11 14:21, 21F

06/11 14:23, , 22F
就算用function還是要處理malloc失敗的case呀~
06/11 14:23, 22F

06/11 15:15, , 23F
看到goto就頭暈 因為程式老師說1張考卷只要寫1個goto
06/11 15:15, 23F

06/11 15:15, , 24F
就是整張零分
06/11 15:15, 24F

06/11 15:17, , 25F
程式老師也變成我的碩士指導教授 有一次幫他改寫程式
06/11 15:17, 25F

06/11 15:17, , 26F
發現他有寫 goto
06/11 15:17, 26F

06/11 16:25, , 27F
A man chooses, a slave obeys (歪
06/11 16:25, 27F

06/11 16:54, , 28F
所以只在像kernel driver這種特別合用的地方才被用呀
06/11 16:54, 28F

06/12 13:37, , 29F
不用goto的寫法,比較看看 https://ideone.com/rj1Nph
06/12 13:37, 29F

06/12 21:10, , 30F
如果裡面不只是做malloc的話while不太合用噢
06/12 21:10, 30F
文章代碼(AID): #1LU4pZun (Soft_Job)
文章代碼(AID): #1LU4pZun (Soft_Job)