Tbpgr Blog

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

書籍 リファクタリング−プログラマーの体質改善 | メソッド呼び出しの単純化 | 例外によるエラーコードの置き換え

内容

リファクタリング

例外によるエラーコードの置き換え

適用ケース要約

メソッドがエラーを示す特別なコードをリターンしている

適用内容要約

代わりに例外を発生される

適用詳細

昔ながらのシステムのように戻り値のコードで正常、異常などを管理している場合は
自分にチェックする責務があるなら例外を利用。
責務がないなら表明を利用します。

サンプル

役所で名前の登録を申請するケースを想定します。
仕様A:名前をチェックするのは登録窓口

サンプルコード

リファクタリング

# encoding: Shift_JIS

class NameRegister
  def regist_name(name)
    return -1 if is_undesirable name
    puts "名前を登録しました"
    return 0
  end
  
  def is_undesirable(name)
    return name=="悪魔"
  end
end

name_register=NameRegister.new
ret = name_register.regist_name "太郎"
puts "太郎は好ましくない名前です" if ret==-1
ret = name_register.regist_name "悪魔"
puts "悪魔は好ましくない名前です" if ret==-1

リファクタリング

# encoding: Shift_JIS

class NameRegister
  def regist_name(name)
    raise NotUndesirableName,"#{name}』は好ましくない名前です" if is_undesirable(name)
    puts "名前『#{name}』を登録しました"
  end
  
  def is_undesirable(name)
    return name=="悪魔"
  end
end

class NotUndesirableName < Exception
end

class NameRegisterManager
  def call_name_register()
    name_register=NameRegister.new
    ret = name_register.regist_name "太郎"
    ret = name_register.regist_name "悪魔"

    rescue => e
      puts e
  end
end

name_register_manager = NameRegisterManager.new
name_register_manager.call_name_register

出力(リファクタリング後)

名前『太郎』を登録しました
※※※※/replace_error_code_with_exception_after.rb:5:in `regist_name': 『悪魔』は好ましくない名前です (NotUndesirableName)