[問題] 改成這樣有什麼好處

看板C_and_CPP (C/C++)作者 (rosemary0401)時間15年前 (2010/11/28 11:40), 編輯推噓2(2014)
留言16則, 4人參與, 最新討論串1/1
重構中有招叫做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)

11/28 12:33, , 1F
好處是可以馬上知道BUG在哪吧,除錯比較容易
11/28 12:33, 1F

11/28 12:49, , 2F
www.refactoring.com/catalog/introduceAssertion.html
11/28 12:49, 2F

11/28 12:50, , 3F
重構前他使用註解,來表明下一段程式碼 "應該做的事" (sh-
11/28 12:50, 3F

11/28 12:50, , 4F
ould),當下的程式碼也有確實反應。但難保之後被人改掉,
11/28 12:50, 4F

11/28 12:51, , 5F
而沒有符合這個應該。利用 Assert 加入一行程式碼來讓這個
11/28 12:51, 5F

11/28 12:52, , 6F
處理更明確。後面修改時,會被 Assert 限制住。
11/28 12:52, 6F

11/28 13:44, , 7F
一個函式有其執行前必須要滿足的 pre-condition, 如果
11/28 13:44, 7F

11/28 13:45, , 8F
不先滿足, 那這個函式可以當給你看而不用負任何責任,
11/28 13:45, 8F

11/28 13:46, , 9F
使用Assert 就是一個告訴別人 pre-condition 為何的
11/28 13:46, 9F

11/28 13:47, , 10F
方法, 條件不符合無法往下跑, 本來的註解辦不到這事
11/28 13:47, 10F

11/28 13:49, , 11F
單元測試中, 也很常用的就是用 Assert 來檢查前置條件
11/28 13:49, 11F

11/28 13:50, , 12F
後置條件是否合乎預期
11/28 13:50, 12F
※ 編輯: rosemary0401 來自: 111.240.225.47 (11/28 14:24)

11/28 14:27, , 13F
剛看到你是從網路上查資料@_@ 其實可以看看這本:
11/28 14:27, 13F

11/28 14:29, , 14F
http://ppt.cc/UtOC 條列式的介紹前因後果, 是經典
11/28 14:29, 14F

11/28 15:57, , 15F
上面那本的中譯本:http://ppt.cc/hxxi
11/28 15:57, 15F

11/28 16:23, , 16F
去找來看看...
11/28 16:23, 16F
文章代碼(AID): #1CySyQBf (C_and_CPP)
文章代碼(AID): #1CySyQBf (C_and_CPP)