Re: [閒聊] 尋求比nest-if更優美的解決辦法

看板C_and_CPP作者 (保持微笑)時間14年前 (2010/12/08 15:59), 編輯推噓6(6018)
留言24則, 4人參與, 最新討論串18/21 (看更多)
※ 引述《awashharp (AwA)》之銘言: : 最近在寫一些網路server相關的程式, : 為了要產生足夠詳盡的錯誤訊息給使用者,常常會發現用了很深的nest-if程式… : 像是: : if(data != NULL) { : if(checkData(data) == 0) { : if(modifyData(data) == 0) { : if(fireDataChanged(data) == 0) { : if(saveDataIntoFile(data) == 0) { : printf("Finally succeed..."); : } : else printf("Data storage failed."); : } : else printf("Observer call failed."); : } : else printf("Data modification failed."); : } : else printf("Data is invaild."); : } : else printf("Data not found."); 看完l大的程式,心中也有點想法想跟大家討論看看 我有一個想法是,寫一個執行動作流程的管理物件 把要執行檢查的function都一個一個的註冊進去 然後輸入要執行的Data , 然後執行. 程式碼在此 http://codepad.org/uA0LIfbu 這樣的設計會過於多餘嗎? 程式碼重用性會不會不好.. 優缺點又是什麼? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.225.52

12/09 00:27, , 1F
邏輯跟再用性都不錯 但是再用性已經超出我的code了@口@
12/09 00:27, 1F

12/09 00:28, , 2F
(總覺得只是因為我的盲點 造成版上筆戰混亂…囧很大)
12/09 00:28, 2F

12/09 00:48, , 3F
容小弟亂入一句,我覺得 Regedit 這個字出現有點怪...
12/09 00:48, 3F

12/09 00:53, , 4F
應該要用Register 英文太差,寫錯了^^"
12/09 00:53, 4F
※ 編輯: sandr1983 來自: 123.240.225.52 (12/09 00:57)

12/09 01:02, , 5F
其實我不太了解程式的專有名詞,像各位大大說的"衛句"
12/09 01:02, 5F

12/09 01:02, , 6F
我書看的太少了@@
12/09 01:02, 6F

12/09 01:23, , 7F
我猜大概是,開檔()->寫入資料(),在兩個動作間加入句子
12/09 01:23, 7F

12/09 01:23, , 8F
if(開檔()=false) return error_code; 不用衛句的做法時
12/09 01:23, 8F

12/09 01:24, , 9F
是 if(開檔()=true) {寫入資料();}
12/09 01:24, 9F

12/09 01:24, , 10F
打錯,應該是 ==
12/09 01:24, 10F

12/09 01:26, , 11F
是指,所有的檢查句都算是"衛句" 防衛性的語句意思嗎???
12/09 01:26, 11F

12/09 01:27, , 12F
assert是衛句嗎? 完整的衛句通常是包含例外處理還是沒有
12/09 01:27, 12F

12/09 01:31, , 13F
我 google 不到衛句 的意義說 @@ 還是關鍵字不對?
12/09 01:31, 13F

12/09 01:34, , 14F
12/09 01:34, 14F

12/09 01:34, , 15F
1.嗯,檢查完,如果不符合還要把執行流程打斷,才是其目的
12/09 01:34, 15F

12/09 01:35, , 16F
2. assert 算 3. 我不知道怎麼講...
12/09 01:35, 16F

12/09 01:43, , 17F
喔喔,謝謝p大l大. 看程式碼去^^
12/09 01:43, 17F

12/09 01:43, , 18F
優缺點要看別人能否接受, 要考慮到別人也可能想傳仿函
12/09 01:43, 18F

12/09 01:44, , 19F
函式進去, 所以註冊的地方能多載是最好, 至於需不需要
12/09 01:44, 19F

12/09 01:45, , 20F
用成員去記...要看你有沒有其他操作要做, 不然每次都
12/09 01:45, 20F

12/09 01:45, , 21F
要替換一次並不會很好用
12/09 01:45, 21F

12/09 01:56, , 22F
std::tr1::function 這個是要另外下載Boost庫嗎???
12/09 01:56, 22F

12/09 01:59, , 23F
目前的 boost 可以用於商業嗎? 感覺這樣的寫法更直覺了
12/09 01:59, 23F

12/09 02:19, , 24F
謝謝l大, 找到了^^. VS2010 #include <functional> 可用
12/09 02:19, 24F
文章代碼(AID): #1C_wjwZ3 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 18 之 21 篇):
文章代碼(AID): #1C_wjwZ3 (C_and_CPP)