Effective Ruby勉強メモ第2回目です
- 作者: Peter J.Jones
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/19
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
スポンサーリンク
オブジェクトを扱うときにはnilかもしれないということを忘れないようにしよう
タイトルの通りですが、Rubyでプログラムを書いているときに最も遭遇する(遭遇した)エラーは
undefuned method 'hoge' for nil:NilClass (NoMethodError)
だと思います。
このエラーの最善の防御策は、常にレシーバがnilになるかもしれないという前提でコードを書くことです。
例えば、第1章のnil, falseだけが偽になるという性質を使うと、
user.save if user
などとすれば、まちがってuserオブジェクトがnilの場合はsaveメソッドを呼び出そうとしてエラーを引き起こしません。
同じことですが、
user.save unless user.nil?
と書いた方が、条件文で何をチェックしたいのか明示的に書かれているので可読性が増します。
あるいは、期待していた変数が文字列や整数値の場合は、nilを空文字や0に変換するという対応策も挙げられます。
to_iメソッドやto_sメソッドは、レシーバがnilの場合、それぞれ0と空文字("")を返します。
また、Arrayクラスのcompactメソッドは配列から全てのnilを排除してくれます。ループを回す前処理として入れておくといいですね。
Railsアプリ等で、必須の入力項目でないカラムに対しては、可能な限り初期値を設定しておくことはとても有効です。
感想
結果的に、nilの場合を考慮した条件分岐やコードがアプリのあちらこちらに散らばってしまいまい、きれいではありませんが、そのようなソースコードはちゃんとnilも考慮されているという安心感があります。
あらためてnilかもしれない前提でコードを書くと言われると、ハッとしますが、Railsを勉強したての頃に比べると、最近ではnilを考慮したコードをかけるようになったのかなと思います。
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (2件) を見る
- 作者: すがわらまさのり
- 出版社/メーカー: 技術評論社
- 発売日: 2018/06/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: Peter J.Jones
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/19
- メディア: Kindle版
- この商品を含むブログ (5件) を見る