Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 Refactoring to Patterns | Protection | Introduce Null Object

パンくず

書籍 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