Null Objectとは
Null Objectとは、「何もしないメソッド」を持つオブジェクトのこと。
クラスベースのオブジェクト指向言語(Java, C#など)だと時折見かける。
class Huga
def huga
'huga'
end
end
class NullHuga
def huga; end
end
class Hoge
def process_huga(huga)
# create_hugaはhuga or nullを返す設定
create_huga || NullHuga.new
end
end
Null Objectのメソッドを呼び出すと、エラーを出さずにメッセージをゴミ箱に捨ててくれる。
つまり、初期化されていない参照をNull Objectで置換すると、NoMethodError
を起こさなくて済む。
これにより、いちいち既存の処理にif
チェックを入れなくても済む。
moduleを応用してみる
対象となるクラスとNull Objectクラス間で共通のメソッドを持つようにするため、Interfaceのようなモジュールを持たせてみる。
# 専用のエラーを作っておく
class InterfaceError < StandardError; end
module HogeInterface
def hoge
raise InterfaceError
end
end
class Hoge
include HogeInterface
def hoge
'hoge'
end
end
class NullHoge
include HogeInterface
def hoge; end
end
これで、Interfaceモジュールに先にメソッド定義するよう心がければ、抜け漏れが減るかも?