Tbpgr Blog

Recruiting Operations tbpgr(てぃーびー) のブログ

書籍 リファクタリング−プログラマーの体質改善 | 条件式の単純化 | ポリモーフィズムによる条件記述の置き換え

内容

リファクタリング

ポリモーフィズムによる条件記述の置き換え

適用ケース要約

オブジェクトのタイプによってふるまいを変える条件文がある

適用内容要約

条件文の分岐先をポリモーフィックに呼び出せるオブジェクトのメソッドに移す

適用詳細

タイプによって振る舞いが変わる処理がある場合、ポリモーフィズムによって
分岐を排除出来ます。

Javaの場合は継承で実現。
Rubyの場合はダック・タイピングが可能であるため、インターフェースだけ揃えれば
実装可能です。

サンプル

初級・中級・上級プログラマーを実装します。

サンプルコード

リファクタリング

# encoding: Shift_JIS

class Programmer
  attr_accessor:type
  BIGINNER=0
  NORMAL=1
  EXPERT=2
  
  def coding(type)
    case type
    when BIGINNER
      return "not resolve"
    when NORMAL
      return "slowly resolve"
    when EXPERT
      return "quickly resolve"
    else
      raise 'error'
    end
  end
end

type = [Programmer::BIGINNER,Programmer::NORMAL,Programmer::EXPERT]
programmer = Programmer.new
type.each {|type|
  puts programmer.coding(type)
}

リファクタリング

# encoding: Shift_JIS

class BiginnerProgrammer
  def coding()
    return "not resolve"
  end
end

class NormalProgrammer
  def coding()
    return "slowly resolve"
  end
end

class ExpertProgrammer
  def coding()
    return "quickly resolve"
  end
end

programmers = [BiginnerProgrammer.new,NormalProgrammer.new,ExpertProgrammer.new]
programmers.each {|programmer|
  puts programmer.coding
}

出力(共通)

not resolve
slowly resolve
quickly resolve