繁体   English   中英

调试断言条件逻辑和语言特性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM