San*_*Lee 12 javascript assert assertion spring-3
我知道为什么断言编程是好的,所以我想用JavaScript.但是,我不想向用户显示错误框,这是不寻常的事情.只是忽略它,让它们重试可能会更好.
例如,此代码将生成错误框并中断用户.
function getDomainFromURL(url) {
assertTrue(url, 'URL should not be null');
...parsing
}
Run Code Online (Sandbox Code Playgroud)
所以,我会这样做.
function getDomainFromURL(url) {
if (!url) return;
...parsing
}
Run Code Online (Sandbox Code Playgroud)
我想,第二个对可用性有好处,第一个对开发有好处.因此,IMO最好将这些结合起来并使其assert消失在生产代码上.
问题1 你是这么认为的吗?或者有什么不同的想法?
问题2 如果您这么认为,有没有什么好方法可以使用Spring3框架?
断言不应用于验证任何类型的用户输入数据.它们也不应用于错误检查.断言是在测试失败的情况下更容易为程序员调试的方法.这也是一种让您的代码更容易理解的方法.
考虑这个例子:
function calculateSomeCrazyFormula(a,b,c) {
var d = a+b+c;
....
k = (x + y)*2;
assert(k != 0);
l = d/k;
....
return x;
}
Run Code Online (Sandbox Code Playgroud)
我的公式由它的规范确保 k永远不会为0.这里我几乎在我的代码中使用断言作为注释.它没有验证逻辑 - 它完全相反.使用断言,我验证我的复杂逻辑的实现是否正确.后来,当我回到我的代码并且看到l = d/k我不会怀疑当k为0时会发生什么,因为我看到了assert那里,并且明白0应该永远不会发生.
此外,如果某处0出现错误并且确实发生了错误,您通常会看到更深层次的错误.例如:
function otherFormula(a,b,c) {
var x = calculateSomeCrazyFormula(a,b,c);
var y = doSomeStuff(x);
var z = doOtherStuff(y);
return z;
}
Run Code Online (Sandbox Code Playgroud)
如果没有断言,您将得到此函数的错误结果.当你应该是1时,你将不知道为什么你会收到0.你必须逐行开始调试代码并理解出了什么问题.
但是,使用断言,您将立即注意到"断言失败"错误,并立即最小化查找问题的范围.
断言在包括Javascript在内的任何编程语言中都很有用,但它们不应该存在于Live环境中.因此,某些后处理器系统应该在发布之前从代码中删除所有断言.
我认为第二个根本不是特别好。如果您从始终期望返回某些内容的方法中不返回任何内容,则代码可能会在其他地方失败,而不是接近实际问题所在的位置,即在函数内getDomainFromURL。
另一方面,如果该方法在参数为 null 时不返回任何内容是完全可以的,那么添加断言就没有意义。
就我个人而言,我会在任何地方使用第一种形式,无论是在开发还是生产中。如果断言在生产中失败,那么您将获得有关问题原因的非常有用的反馈(在浏览器、日志等中)。如果删除断言,错误仍然存在,但追踪起来会更加困难
这种编程风格(检查先决条件)是所谓的基于契约的编程的一部分。我以前从未听说过“断言编程”这个词。
| 归档时间: |
|
| 查看次数: |
7545 次 |
| 最近记录: |