当前位置 博文首页 > 一条IT:assert的用法总结

    一条IT:assert的用法总结

    作者:[db:作者] 时间:2021-08-13 12:46

    今天在写代码时看到idea有个assert的提示,好奇心驱使之下对它一探究竟,跟着一条一块看看吧

    ?

    断言(assert)的含义

    assert() 的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作。

    其实就相当于一个 if 语句:?

    if(假设成立)
    {
         程序正常运行;
    }
    else
    {
          报错&&终止程序!(避免由程序运行引起更大的错误)  
    }

    但是这样写的话,就会有无数个 if 语句,甚至会出现,一个 if 语句的括号从文件头到文件尾。并且大多数情况下,我们要进行验证的假设,只是属于偶然性事件,又或者我们仅仅想测试一下,一些最坏情况是否发生,所以这里有了 assert()。

    好处

    assert 的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向 stderr 打印一条出错信息,然后通过调用 abort 来终止程序运行。

    坏处

    使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。

    用法总结

    基本应用

    在函数开始处检验传入参数的合法性

    int resetBufferSize(int nNewSize) 
    { 
    //功能:改变缓冲区大小, 
    //参数:nNewSize 缓冲区新长度 
    //返回值:缓冲区当前长度 
    //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区 
    assert(nNewSize >= 0); 
    assert(nNewSize <= MAX_BUFFER_SIZE); 
     
    ... 
    }

    应用举例

    public?class?AssertFoo {
    ????public?static?void?main(String args[]) {
    ????????//断言1结果为true,则继续往下执行
    ????????assert?true;
    ????????System.out.println("断言1没有问题,Go!");
    
    ????????System.out.println("\n-----------------\n");
    
    ????????//断言2结果为false,程序终止
    ????????assert?false?:?"断言失败,此表达式的信息将会在抛出异常的时候输出!";
    ????????System.out.println("断言2没有问题,Go!");
    ????}
    }

    注意事项

    cs