assert函数广泛在java、Python、PHP、C语言中存在,都有统一的意义,用业界语言称之为"断言"。最初的出发点都是为了方便调试而设计的,但是最近越来越多的开发者不分测试环境和正式环境滥用assert函数,引发了我对广大程序员朋友的担忧,故写此篇文章普及assert函数常识,避免各位朋友滥用assert函数。
简单的概况在各个语言中assert函数的意义:如果表达式的值为假,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的语句。
assert函数
assert函数Java中,断言关键字是从JAVA SE 1.4引入的。为了避免在旧版本的Java代码中使用assert关键字导致的错误,Java在执行时默认不启动断言检查(此时,所有断言语句都将被忽略!),如果您想打开断言检查,您需要使用switch-enable断言或-ea来打开它。
在C中,assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行
assert函数
Python中断言函数作用:断言函数是对表达式布尔值的判断,要求表达式计算值必须为真。可用于自动调试。
如果表达式为假,触发异常;如果表达式为真,不执行任何操作。
断言函数形式:
assert(condition)
if not condition:
raise AssertionError()
PHP中assert这个函数在php语言中是用来判断一个表达式是否成立。返回true or false;例如
$s = 123;
assert("is_int($s)");
?>
从这个例子可以看到字符串参数会被执行,这跟eval()类似。不过eval($code_str)只是执行符合php编码规范的$code_str。
已放弃使用assert()的原因是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,应当禁用assert调用。
Assert用于避免明显的错误,而不是处理异常。错误和异常是不同的。错误不应该发生,例外是不可避免的。c语言异常可以通过条件判断来处理。其他语言有自己的异常处理机制。
使用assert的一个非常简单的规则是在方法或函数的开头使用它。如果你在一个方法中使用它,你需要仔细考虑它是否合适。在该方法开始时,功能过程还没有开始,并且在功能过程执行期间发生的几乎所有问题都是直接抛异常的。
为assert是用于调试测试程序的,并且不用于正式的生产环境,所以应该考虑用一个更好的测试JUint来代替它。JUint提供了比assert键更多的功能。当然,调试和测试可以通过集成开发环境调试来进行。
因此,应该避免在各种语言中使用assert函数,除非某一天assert函数变得无比的强大,不再区分测试环境和正式环境的切换,此时可以考虑这一点。比较一下断言能给你带来多少好处和麻烦。这是我们选择是否使用它的原则。
好了,先生们女士们,此次关于assert函数就分享到这里!