這是我第一次編寫一個庫(對於我在幾個遊戲中使用),所以我認爲對於良好的編程實踐,我應該直接評論我的代碼,添加XML摘要並使用異常處理這個庫的用戶在許多.NET類中做了一些錯誤(用戶可能是我或我的隊友)關於拋出和斷言的困惑
這是NoteRow類的構造函數(我正在開發音樂遊戲,需要)確定創建陣列的大小
bool[] l1NoteData;
public NoteRow(int numberOfNotes)
{
this.l1NoteData = new bool[numberOfNotes];
}
現在我有這種方法來切換l1NoteData數組上的布爾值。
public void toggleNote(uint index)
{
l1NoteData[index] = !l1NoteData[index]
}
所以這裏作爲防禦性編程我想檢查指數(這個類的用戶將指定,這是我或許我的隊友),超出了創建這個類或不是當指定的範圍。
我讀過很多拋出異常與斷言與返回布爾等,仍然困惑,不能選擇。這是我所關心的:
- 我應該把「如果」語句來檢查,如果指數超過l1NoteData.length那麼火一個異常時,它是,明知異常時,該行以執行無論如何會閃光「超出範圍'索引? (IndexOutOfRangeException)如果是這樣,那麼拋出異常有什麼用?如果出現問題,會有一個默認的異常呢?
- 我讀過Assert是給程序員的。要注意程序員,代碼不作爲程序員假定。與拋出用於處理異常測試用例(由用戶)的異常相比,我們永遠不能注入測試用例來使斷言觸發(如果它被觸發,那麼代碼是錯誤的)。現在這個圖書館的用戶將成爲我。所以我被認爲是程序員或用戶?我作爲這個類的用戶可能會調用
toggleNote
並且輸入索引超出了數組的限制,所以會拋出異常。或者我作爲一個程序員我的遊戲(這個庫是我的遊戲的一部分)應該放在那裏,所以我不會犯我的遊戲超出限制的索引toggleNote
的錯誤。 (使用這個庫)我現在可以知道遊戲的代碼是錯誤的,因爲assert被解僱了,然後修復它,最終成爲發佈版本。 (然後斷言代碼將消失) - 從上面的問題,如果我徹底測試,我確信沒有更多的錯誤導致assert運行,然後進入發佈版本。我知道斷言不會在發佈版本的代碼中......但是這真的很好嗎?程序中可能存在更多的錯誤,所以現在當用戶體驗到這個錯誤時,斷言不會再出現。因此,當我可以使用異常而不是使用異常時,聲明真正好用的東西,如果用戶導致該異常觸發,我作爲開發人員可以接收該錯誤報告以修復它(但用戶是我和我的朋友)
- 拋出異常比返回bool指示成功/失敗要好100%?你認爲哪個例子更適合返回bool?
對不起,我的混亂英語,因爲我已經在這個問題困惑......