通常我们的有三种方式把错误信息传递给函数的调用者。
1.函数用返回值来告知调用者是否出错。这种方式最大的问题是使用不便,因为函数不能直接把计算结果通过返回值赋给其他变量,同时也不能把这个函数的计算结果直接作为参数传递给其他函数。
2.当发生错误时设置一个全局变量。此时我们可以在返回值中传递计算结果了。这种方法比第一种方法使用起来更加方便,因为调用者可以直接把返回值赋给其他变量或者作为参数传递给其他函数。
但是这个方法有个问题:调用者很容易就会忘记去检查全局变量,因此在调用出错的时候,忘记做相应的错误处理,从而留下安全隐患。
3.第三种方式就是异常。等函数运行出错的时候,我们就抛出一个异常,我们还可以根据不同的出错原因定义不同的异常类型。因此函数的调用者根据异常的类型就能知道出错的原因,从而做相应的处理。
另外,我们能够显示划分程序正常运行的代码块(try 模块)和异常处理的代码块(catch 模块),逻辑比较清晰。另外,当抛出异常的时候,程序的执行会打乱正常的顺序,对程序的性能有很大的影响。
方式 | 优点 | 缺点 |
---|---|---|
返回值 | 和系统 API 一致 | 不能方便的使用计算结果 |
全局变量 | 能够方便的使用计算结果 | 用户可能会忘记检查全局变量 |
异常 | 可以为不同的出错原因定义不同的出错类型,逻辑清晰 | 有些语言不支持异常,抛出异常时对性能有负面影响 |
上述三种错误处理方式各有其优缺点。那么,面试的时候我们应该采取哪种方式呢?这要看面试官的要求。在听到面试官的题目之后,我们要尽快分析出可能存在哪些非法的输入,并和面试官讨论如何处理这些非法输入。