[英]Debug Assert condition logic and language peculiarities
我不是母語為英語的人,所以對我來說, Debug.Assert
方法有點奇怪,對我來說,驗證一個條件,實際上驗證了這個條件的反面。
斷言 =推進,肯定,爭辯,證明,aver,聲稱,宣告,宣傳,發音,提出,說,壓力等
我期待,那個
Debug.Assert(Me.Member Is Nothing, "Member Is Nothing!")
表現得像
Affirm(condition, "Message") ' conditional message
但是,實際上我應該這樣做
Debug.Assert(Me.Member Is Nothing, "Member Is NOT Nothing!")
Affirm(NOT condition, "Message") ' counter-conditional message
我錯過了什么嗎?
你看到這個直觀與否?
你有正確的語法,但這樣想
Debug.Assert(Me.Member Is Nothing, "Member assert.")
這將斷言Me.Member is Nothing
,並且只會在不是時提醒您。 有點像你是在爭論,你說“地球是75%的水”。 沒有太多人會與你爭論。 但如果你說“地球主要由巧克力蛋糕組成。” 人們會爭辯。
對於Assert也是如此,如果斷言為真,則不需要調試器說出來。 如果它是假的,它需要讓你知道。
順便說一句,我是一個以英語為母語的人,前幾次我寫了斷言語,我向后寫了:)
Debug.Assert
的API確實有點違反直覺。 我花了很長時間才習慣這個。 在我的腦海里, Assert
翻譯成這個:
if (condition)
{
Fail(message);
}
但事實上,它轉化為:
if (condition)
{
// Success
}
else
{
Fail(message);
}
或簡而言之:
if (!condition)
{
Fail(message);
}
訣竅是布爾表達式應為true 而不是斷言。 不過我認為這個設計已經被選中了,因為這個API已經為C ++開發人員提供了很長時間,並且交換它會讓他們眼花繚亂。
關鍵是你對Assert
方法的假設有點偏僻。
我的意思是,該函數檢查條件是否有效,即TRUE。 所以它肯定了條件。
如果不滿足條件,即FALSE,則顯示消息。
使用Assert
,可以驗證代碼中的邏輯。 (可選)如果斷言失敗,您可以添加消息以幫助調試。
int i = 3;
i *= 3;
assert(i == 9, "Strange arithmetic failure");
(抱歉,C ++代碼。)
你沒有遺漏任何東西。 也許設計師應該調用方法“IfNot”而不是“Assert”。 我想他們並不是說Assert調用被讀作“if”語句。 “斷言”作為檢查值的方法名稱在C / C ++中也有很長的歷史,所以我猜他們想在C#中使用相同的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.