Hyurakuのエンジニア日誌

SE出身Webエンジニアのブログ

Effective Rubyの備忘録その2 #29

EFFECTIVE Rubyの備忘録その2

扱っているオブジェクトはNilかもしれないことに注意する

本編ではBasicObjectやダッチタイピングについての言及があるがここでは割愛する。

  • オブジェクト呼び出しときに注意しなければいけないのは対象のオブジェクトがnilだった時である。

NoMethodError: undefined method `zero?' for nil:NilClass
  • 次のようなケースはnil?メソッドによってエラーを回避できる。

person.save if person
person.save if !nil?
  • nil自体を別のオブジェクトに変換するメソッドがある。

    次のメソッドによってnil引数によるエラーを回避できる。

one = nil
one.to_s
> ""
one.to_i
> 0
one.to_a
> []
one.to_h
> {}
one.to_f
> 0.0
  • Arrayのcompactメソッドはarrayのnil要素を取り除く。

    たとえば個人の選択科目のテスト平均点を求めるときに次のような使う。
    (受けていない科目の点数はnilになるので省く必要がある)

score_list = [select_A, select_B,select_C].compact
average_score =score_list.inject{ |sum, el| sum + el }.to_f / score_list.size