パンくず
リファクタリング-プログラマーの体質改善テクニック
メソッド呼び出しの単純化
例外によるエラーコードの置き換え
内容
リファクタリング名
例外によるエラーコードの置き換え
適用ケース要約
メソッドがエラーを示す特別なコードをリターンしている
適用内容要約
代わりに例外を発生される
適用詳細
昔ながらのシステムのように戻り値のコードで正常、異常などを管理している場合は
自分にチェックする責務があるなら例外を利用。
責務がないなら表明を利用します。
サンプル
役所で名前の登録を申請するケースを想定します。
仕様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)