美文网首页
代码洁癖系列(六):处理错误

代码洁癖系列(六):处理错误

作者: Jackeyzhe | 来源:发表于2018-09-04 00:10 被阅读11次

程序运行过程中,有些错误是不可避免的,而如何使程序在出现错误时代码仍然正常工作就成了程序员的日常工作之一。那么处理错误和代码整洁有什么关系呢?

前面我们提到过,try-catch代码块会破坏代码的结构。但是,我们在处理错误时又不得不使用try-catch代码块,这样才能让我们的程序保持健壮。那么如何兼顾整洁和健壮呢,这就是我们今天要讨论的内容。

不要使用返回码

在上古时期,很多语言还都不支持异常,程序员们只能约定好返回的错误码,通过不同的错误码对代码进行错误处理。这么做需要调用者在调用方法后马上判断返回值来决定是否需要处理错误。而这一步骤往往被遗忘,就会导致程序出现不可预估的问题。所以,现在我们有了throw和try-catch这样的“热武器”,就不要再用错误码这样的“冷兵器”了。不然很容易就会被别人给秒杀的。

try-catch-finally相信大家都很熟悉,不熟悉的话,可以前往本站达成合作的各大搜索引擎进行搜索,保证有答案。

异常抛出的层级

我们不希望程序中充满了try-catch代码块,这样会使程序的可读性变差。因此,我们要适当的使用throw语句,将异常抛出。交给上一层去处理。但是,如果只由最顶层的代码去处理异常,整个程序看上去是会整洁一些,但当我们需要修改某个底层代码抛出的异常时会发生什么呢?我们需要找到往上抛的每一个方法去修改它的签名,抛出新的异常,并重新发布。这会使我们的工作量增加好几倍。所以,我们的异常最好在本层进行统一处理,或者在抛出后的上一层就进行处理。

说明发生异常的环境

在Java中,系统异常通常会给出调用栈,便于我们进行问题的定位和调试。对于我们自己抛出的异常,也应该给出异常发生的环境,例如列出调用栈,给出请求参数等等。

远离null值

我们在读、写代码时,一定有被好多层的空指针判断折磨的经历。一不小心漏掉一个判断,那么程序就会出现空指针异常,这个异常要么被上层的catch捕获,要么直接抛出。很明显,这两种结果都不是我们想要的。怎么远离空指针异常呢?

首先,代码的返回值不要返回null。可以选择直接抛出一个异常,或者返回一个特定的值,比如空对象等。

其次,代码调用时,参数不要传null,因为一旦传null,那么在方法体中就需要对这个参数进行非空判断。而目前还没有什么好的方法可以简单高效的处理参数外部传来的null,只能使用if判断。因此希望大家在调用别的方法时尽量不要传入null。

小结

本文的主要目的是使我们的代码兼顾整洁性和健壮性。这就需要我们将错误处理独立于主逻辑之外,使错误就可以被单独处理,不但能够增强可读性,还能增强可维护性。最后得到的就是我们希望看到的整洁而健壮的代码。


欢迎关注我的个人公众号:代码洁癖患者


wechat-qcode.jpg

相关文章

  • 代码洁癖系列(六):处理错误

    程序运行过程中,有些错误是不可避免的,而如何使程序在出现错误时代码仍然正常工作就成了程序员的日常工作之一。那么处理...

  • RxJava的错误处理一-retry

    RxJava的错误处理主要分为两类,retry系列以及onErrorRetrun系列。retry系列是当错误的时候...

  • 代码洁癖系列(一):什么是整洁代码

    作为一个代码洁癖患者,我最大的愿望就是世界和平……对不起,拿错剧本了,最大的愿望就是将对代码的洁癖传播给每一个人,...

  • python 异常处理

    异常就是程序运行错误或者逻辑混乱,返回了错误的代码,为了不让用户看到错误的代码,所以需要对异常的代码进行错误处理 ...

  • python 2.3 基础

    错误、调试和测试错误处理:try:运行代码,如果执行错误,则后续代码不会执行except:except error...

  • 错误处理与调试

    本章内容:处理错误与调试JavaScript代码 一、错误处理 错误处理在程序设计中的重要性是毋庸置疑的,良好的错...

  • Error处理,泛型

    swift系列课程 自定义错误 do-catch 处理Error 处理rethrows 处理defer 泛型 关联...

  • eslint 规则

    代码洁癖养成指南

  • 代码洁癖系列(二):命名的艺术

    不知道大家还记不记得《家有儿女》里有这么一段经典台词:“我叫夏雪”,“我叫夏雨”,“我叫夏冰雹”。 刘星自己给自己...

  • 代码洁癖系列(八):迭代的原则

    我们都知道,一个软件的维护成本往往要高于其研发成本。在维护过程中,我们的代码需要不断的进行迭代。迭代的目的有两个:...

网友评论

      本文标题:代码洁癖系列(六):处理错误

      本文链接:https://www.haomeiwen.com/subject/xhywwftx.html