看板 C_and_CPP 關於我們 聯絡資訊
重構中有招叫做Introduce Assertion 網路上找到的例子是把: double getExpenseLimit() { // should have either expense limit or a primary project return (_expenseLimit != NULL_EXPENSE) ? _expenseLimit: _primaryProject.getMemberExpenseLimit(); } 變成: double getExpenseLimit() { Assert.isTrue (_expenseLimit != NULL_EXPENSE || _primaryProject != null); return (_expenseLimit != NULL_EXPENSE) ? _expenseLimit: _primaryProject.getMemberExpenseLimit(); } 為何改良後還是用 _expenseLimit != NULL_EXPENSE 做為判斷? 還是例子有誤呢? 好處是不必使用註解嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.225.47 ※ 編輯: rosemary0401 來自: 111.240.225.47 (11/28 11:40)
stupid0319:好處是可以馬上知道BUG在哪吧,除錯比較容易 11/28 12:33
purpose: www.refactoring.com/catalog/introduceAssertion.html 11/28 12:49
purpose:重構前他使用註解,來表明下一段程式碼 "應該做的事" (sh- 11/28 12:50
purpose:ould),當下的程式碼也有確實反應。但難保之後被人改掉, 11/28 12:50
purpose:而沒有符合這個應該。利用 Assert 加入一行程式碼來讓這個 11/28 12:51
purpose:處理更明確。後面修改時,會被 Assert 限制住。 11/28 12:52
loveme00835:一個函式有其執行前必須要滿足的 pre-condition, 如果 11/28 13:44
loveme00835:不先滿足, 那這個函式可以當給你看而不用負任何責任, 11/28 13:45
loveme00835:使用Assert 就是一個告訴別人 pre-condition 為何的 11/28 13:46
loveme00835:方法, 條件不符合無法往下跑, 本來的註解辦不到這事 11/28 13:47
loveme00835:單元測試中, 也很常用的就是用 Assert 來檢查前置條件 11/28 13:49
loveme00835:後置條件是否合乎預期 11/28 13:50
※ 編輯: rosemary0401 來自: 111.240.225.47 (11/28 14:24)
loveme00835:剛看到你是從網路上查資料@_@ 其實可以看看這本: 11/28 14:27
loveme00835:http://ppt.cc/UtOC 條列式的介紹前因後果, 是經典 11/28 14:29
james732:上面那本的中譯本:http://ppt.cc/hxxi 11/28 15:57
purpose:去找來看看... 11/28 16:23