パンくず
リファクタリング-プログラマーの体質改善テクニック
メソッド呼び出しの単純化
メソッドによる引数の置き換え
内容
適用内容要約
引数を削除し、受信側にそのメソッドを呼び出させる
サンプル
あるゲームで攻撃を行った場合を想定します。
基本ダメージは力*武器の攻撃力とします
攻撃ダメージは基本ダメージから相手の防御力を引いたものとします。
サンプルコード
# encoding: Shift_JIS class DamageCalculator attr:player,:enemy def initialize(player,enemy) @player=player @enemy=enemy end def calculate_damage() base_damage=player.strength+player.weapon attack_damage=get_attack_damage(base_damage) end private def get_attack_damage(base_damage) return base_damage-enemy.defence end end class Character attr_accessor:strength,:weapon,:defence def initialize(strength,weapon,defence) @strength=strength @weapon=weapon @defence=defence end end player=Character.new(10,100,50) enemy=Character.new(50,20,30) damage_calculator=DamageCalculator.new(player,enemy) puts "ダメージは#{damage_calculator.calculate_damage}" damage_calculator=DamageCalculator.new(enemy,player) puts "ダメージは#{damage_calculator.calculate_damage}"
# encoding: Shift_JIS class DamageCalculator attr:player,:enemy def initialize(player,enemy) @player=player @enemy=enemy end def calculate_damage() attack_damage=get_attack_damage end private def get_attack_damage() return get_base_damage-enemy.defence end private def get_base_damage() return player.strength+player.weapon end end class Character attr_accessor:strength,:weapon,:defence def initialize(strength,weapon,defence) @strength=strength @weapon=weapon @defence=defence end end player=Character.new(10,100,50) enemy=Character.new(50,20,30) damage_calculator=DamageCalculator.new(player,enemy) puts "ダメージは#{damage_calculator.calculate_damage}" damage_calculator=DamageCalculator.new(enemy,player) puts "ダメージは#{damage_calculator.calculate_damage}"
出力(共通)
ダメージは80 ダメージは20