干Java编程也有好几年了,但是之前对Java中的异常机制应该如何更好的使用一直没有想明白。今天谈一谈我对于存在异常处理机制的语言如何准确使用异常机制。
我觉得首要的一个点就是明确什么是异常!编程说白了就是数据结构+算法,再复杂的应用程序归结下来也就是这么两个东西。无论是面向过程还是面向对象的编程思想下,函数都作为我们进行逻辑处理的一个表达形式,一个函数必然有着输入和输出,我们应该先考虑预期正常的处理下我们的函数进行逻辑处理后应该返回什么样的结果,如果不在预期之内的那便是异常。
示例一:一个处理函数存在两个入参,会对这两个入参进行逻辑运算,返回值为入参的运算结果。 那么我们势必要求两个入参都不能为空,那如果参数为空,不满足我们计算的基本要求,这就是一个异常,在存在异常处理机制的编程语言中就能够抛出让上层处理。
示例二:还是和示例一一样,两个入参进行逻辑运算, 但是入参的运算结果要求如果其中的一个参数为空或者不满足要求时返回一个特定的结果。这种情况下出现了空入参还是异常吗?明显不是。
所以我认为异常是要基于函数的预期返回结果来看的,不是预期的返回结果就是异常。
在没有异常处理机制的语言中,如果出现了非预期的结果并立即中断执行,而且又想知道具体的错误信息,只能通过包装处理结果来达到目的,但是这个就会要求外部程序要不断通过函数的返回值确定执行结果是否成功或者失败。在存在异常处理机制的编程语言中,可以通过抛出指定的异常完成,外部程序可以通过捕获异常来完成处理,如果调用函数的外部代码无法处理则无需捕获应该继续往上抛出,直到找到能处理该异常的逻辑或者做异常兜底处理。
我认为存在异常机制能够很有效的减少冗余的是否成功的判断逻辑。 在笔者所经历的项目中就存在着这种全都用包装类返回进行判断的代码,让笔者叫苦不迭。其实这也是长久以来的关于到底是要用包装返回还是异常抛出的讨论,我是明确支持使用异常机制来处理,但是在一个项目团队中,如果已经有了相关的协作规范就还是按照规范来会更好一些。