看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
awashharp:邏輯跟再用性都不錯 但是再用性已經超出我的code了@口@ 12/09 00:27
awashharp:(總覺得只是因為我的盲點 造成版上筆戰混亂…囧很大) 12/09 00:28
purpose:容小弟亂入一句,我覺得 Regedit 這個字出現有點怪... 12/09 00:48
sandr1983:應該要用Register 英文太差,寫錯了^^" 12/09 00:53
※ 編輯: sandr1983 來自: 123.240.225.52 (12/09 00:57)
sandr1983:其實我不太了解程式的專有名詞,像各位大大說的"衛句" 12/09 01:02
sandr1983:我書看的太少了@@ 12/09 01:02
purpose:我猜大概是,開檔()->寫入資料(),在兩個動作間加入句子 12/09 01:23
purpose:if(開檔()=false) return error_code; 不用衛句的做法時 12/09 01:23
purpose:是 if(開檔()=true) {寫入資料();} 12/09 01:24
purpose:打錯,應該是 == 12/09 01:24
sandr1983:是指,所有的檢查句都算是"衛句" 防衛性的語句意思嗎??? 12/09 01:26
sandr1983:assert是衛句嗎? 完整的衛句通常是包含例外處理還是沒有 12/09 01:27
sandr1983:我 google 不到衛句 的意義說 @@ 還是關鍵字不對? 12/09 01:31
loveme00835:少用轉型 http://codepad.org/76fOHobz 12/09 01:34
purpose:1.嗯,檢查完,如果不符合還要把執行流程打斷,才是其目的 12/09 01:34
purpose:2. assert 算 3. 我不知道怎麼講... 12/09 01:35
sandr1983:喔喔,謝謝p大l大. 看程式碼去^^ 12/09 01:43
loveme00835:優缺點要看別人能否接受, 要考慮到別人也可能想傳仿函 12/09 01:43
loveme00835:函式進去, 所以註冊的地方能多載是最好, 至於需不需要 12/09 01:44
loveme00835:用成員去記...要看你有沒有其他操作要做, 不然每次都 12/09 01:45
loveme00835:要替換一次並不會很好用 12/09 01:45
sandr1983:std::tr1::function 這個是要另外下載Boost庫嗎??? 12/09 01:56
sandr1983:目前的 boost 可以用於商業嗎? 感覺這樣的寫法更直覺了 12/09 01:59
sandr1983:謝謝l大, 找到了^^. VS2010 #include <functional> 可用 12/09 02:19