パンくず
リファクタリング-プログラマーの体質改善テクニック
条件式の単純化
ポリモーフィズムによる条件記述の置き換え
内容
適用ケース要約
オブジェクトのタイプによってふるまいを変える条件文がある
適用詳細
タイプによって振る舞いが変わる処理がある場合、ポリモーフィズムによって
分岐を排除出来ます。
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