パンくず
書籍 Patterns to Patterns
Protection
Introduce Null Object
概要
Introduce Null Objectについて
使用する場面
大量のNullチェックがある場合
対応方法
Null Objectを導入します
利点と欠点
利点
・Nullロジックの重複を防ぎ、Nullエラーを防ぐ
・Nullテストを最小化しシンプルなコードにする
欠点
・わずかなNullロジックしかない場合、設計は複雑になる
・Nullオブジェクトが導入されていることを知らないプログラマーがいた場合、
結局Nullチェックが行われてしまう
・保守が複雑になる。
サンプル
# encoding: Windows-31J require "pp" class BaseHoge attr_accessor:name def initialize(name="") @name=name end end class Hoge < BaseHoge def hoge() puts name end end class NilHoge < BaseHoge def hoge() puts "" end end def testHoge1(hoge) hoge.hoge unless hoge.nil? end def testHoge2(hoge) hoge.hoge end hoge1 = Hoge.new("hoge") testHoge1(hoge1) hoge2 = nil testHoge1(hoge2) # =>nilだった場合,例外を回避するためにif文を使用 hoge2 = NilHoge.new testHoge2(hoge2) # => if文が不要になった
出力
hoge