Ruby经典系列: exceptional ruby
Ruby语言中异常处理是确保程序稳定运行的重要组成部分。在Ruby经典系列书籍《Exceptional Ruby》中,作者详细探讨了在Ruby代码中如何有效地处理异常,以及如何设计健壮的错误处理策略。 了解“失败”的概念对于处理异常至关重要。在Ruby中,失败可以被视作是“契约”的违背。在编写代码时,需要考虑到失败的原因,例如输入错误、资源不可用、程序设计缺陷等。异常的生命周期通常从一个raise(或fail)开始,通过raise方法触发异常,然后异常沿着调用栈向上传递。为了更深入理解这一过程,作者还介绍了raise内部机制,包括调用#exception获取异常对象、#set_backtrace设置堆栈跟踪、设置全局异常变量,以及如何将异常向上抛出到调用栈。 在异常处理方面,Ruby提供了动态救援子句(rescue clause),允许在特定条件下捕获并处理异常。这些条件包括:直接使用rescue关键字作为语句修饰符,动态地指定rescue条件,以及处理在异常处理过程中引发的异常。此外,还有嵌套异常、重新引发异常以及禁止重复引发异常的技巧。 在一些特殊场景下,比如在多线程环境中,可能需要对异常进行特别处理。例如,当异常在一个线程中被抛出,应当如何在其他线程中进行处理或报告。书中还探讨了异常处理是否会导致程序性能下降的问题,并给出了一些响应失败的策略,比如设置失败标志、将失败报告到控制台、将警告视为错误,并且实现远程失败报告。 Ruby异常处理策略还包括在出现故障时如何恰当地结束程序,以及在某些情况下是否可以使用异常之外的其他机制来处理错误。例如,可以使用多返回值、输出参数和调用者提供的回退策略等方法来替代传统的异常处理方式。 除此之外,书中还讨论了异常安全性(exception safety)的概念,即在发生异常时如何保证代码的正确性,它包括三个基本保证:基本承诺(即使发生异常,对象依然保持有效状态)、强承诺(对象保持一致状态,但可能无效)和不抛异常(在异常安全性函数中不抛出异常)。作者还提供了异常安全性测试的实现方法,并强调了在编写异常安全代码时,需要区别对待有效性和一致性。 作者建议读者制定一个失败处理策略,并且给出了一些具体建议,例如不应该期望异常的发生,只有在真正遇到意外情况时才抛出异常;使用throw来处理预期情况,明确什么构成了异常情况,并在抛出异常前自问五个问题:情况是否真正意外,是否准备好结束程序,是否可以将决策推向上层调用链,是否在抛弃有价值的诊断信息,以及是否继续会导致产生一个信息量较少的异常。 《Exceptional Ruby》是一本非常适合想要深入了解Ruby异常处理的程序员的书籍。通过阅读此书,读者不仅能掌握在Ruby代码中处理异常的方法,还能学会如何设计出更加健壮和可维护的程序。
剩余101页未读,继续阅读
- 语言废墟2017-04-19非常好的电子书。
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助