Effective Rubyを読んでいます(3)

tl;dr

「Effective Ruby」の項目21から項目23まで読みました。 :arrow_down: 目次です。

  • 項目21 コレクションクラスからの継承よりも委譲を使うようにしよう。
  • 項目22 raiseにはただの文字列ではなくカスタム例外を渡そう
  • 項目23 できる限りもっとも対象の狭い例外を処理するようにしよう

新しく知ったこと

項目22、23を読んでアプリ固有の原因で、例外を発生させたい場合、カスタム例外を使用することがオススメだと知りました。 理由としては、例外をキャッチする側が処理方法が分かっている例外のみをキャッチしたいからです。

例えば、扱っているコードの大部分の例外がネットワーク接続エラーとDB接続エラーだとします。この場合、時間を空けてリトライする対応が考えられます。とすると、下記のような実装になります。

begin
  # 処理をする
rescue NetWorkNotConnectionError, DBNotConnectionError => ex
  # 時間を空けて再接続処理を行う
end

このように、カスタム例外を使用すると、例外に対する処理がやり易くなります。

分からなかったこと

項目21では、存在しないキーにアクセスした場合に、KeyErrorが発生するRasingHashが例として取り上げられています。全体的にピンと来なかったので、手を動かしながら再度、確認しようと思います(分からないことが 分からないレベルの理解度です)。

感想

項目22、23を読んで、今まで雑に例外を発生させたり、処理したりしていました。恥ずかしい限りです :neutral_face: