在代码开发过程中,由于大量的错误处理代码和正常的业务处理逻辑代码交杂在一起,导致代码凌乱不堪,逻辑不清,错误处理很重要,但是如果错误处理代码扰乱了代码逻辑,那这样本身就是错误的。本章主要讲述了如何雅致地处理错误代码的一些技巧和思路。
1.使用异常而非错误代码
以前,在处理错误时,要么设置一个错误标识,要么返回给调用者检查的错误码,但这会严重搞乱调用者代码,调用者必须在调用之后即可检查错误,但这个步骤很容易被遗忘,所以,遇到错误的时候,最好抛出一个异常,由上层代码捕获异常,统一处理,这样就可以很好的将错误处理代码和业务逻辑代码分离开来。
2.使用try-catch-finally语句
异常的妙处之一就是它们可以在程序中定义一个范围,在某种意义上,try代码块就像是事务,catch代码块将程序维持在一种持续状态,无论try代码块中发生什么错误,都可以通过catch来进行维护
3.使用不可控异常
相对于不可控异常,可控异常可以保证每个签名都列出它可能传递给调用者的异常,让调用者直观的就能知道所有可能出现的异常幷正对性的进行处理,但是可控异常违反了开闭原则,因为一旦一修改最底层的代码,抛出了新的异常,你就得在每个调用该函数的函数中修改,进行相应的异常捕获,这会严重破坏代码的封装性。
4.给出异常发生的环境说明
在抛出异常的地方,处理堆栈信息外,因为添加足够的环境说明,如类名,方法名或相关业务数据信息,以便判断错误的来源和处所,这样对于问题的排查会带来有很大的益处,如果有日志系统,应该在异常处记录足够准确丰富的错误信息。
5.不要返回null
一个方法返回null,会给上层代码增加严重的null处理负担,而且一旦遗漏对null的处理,就会导致难以排查的错误,所以尽量不要在方法中返回一个null。
6.不要传null
除非API要求你传null值进行业务流程区分,否则尽量不要往函数中传null参数,因为这很有可能导致被调用函数抛出难以排查的空指针异常