Skip to content

Instantly share code, notes, and snippets.

@samnang
Created May 23, 2013 11:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samnang/5635344 to your computer and use it in GitHub Desktop.
Save samnang/5635344 to your computer and use it in GitHub Desktop.
Refactoring Ruby Edition Chapter6: Split Temporary Variable
class App
def initialize(primary_force, secondary_force, delay, mass)
@primary_force = primary_force
@secondary_force = secondary_force
@delay = delay
@mass = mass
end
def distance_traveled(time)
acc = @primary_force / @mass
primary_time = [time, @delay].min
result = 0.5 * acc * primary_time * primary_time
secondary_time = time - @delay
if secondary_time > 0
primary_vel = acc * @delay
acc = (@primary_force + @secondary_force) / @mass
result += primary_vel * secondary_time + 5 * acc * secondary_time *
secondary_time
end
result
end
end
class App
def initialize(primary_force, secondary_force, delay, mass)
@primary_force = primary_force
@secondary_force = secondary_force
@delay = delay
@mass = mass
end
def distance_traveled(time)
secondary_time(time) > 0 ? secondary_distance(time) : primary_distance(time)
end
private
def primary_acc
@primary_force / @mass
end
def secondary_acc
(@primary_force + @secondary_force) / @mass
end
def primary_vel
primary_acc * @delay
end
def primary_distance(time)
primary_time = [time, @delay].min
0.5 * primary_acc * primary_time * primary_time
end
def secondary_distance(time)
_secondary_time = secondary_time(time)
result = primary_distance(time)
result += primary_vel * _secondary_time + 5 * secondary_acc * _secondary_time *
_secondary_time
end
def secondary_time(time)
time - @delay
end
end
class App
def initialize(primary_force, secondary_force, delay, mass)
@primary_force = primary_force
@secondary_force = secondary_force
@delay = delay
@mass = mass
end
def distance_traveled(time)
primary_acc = @primary_force / @mass
primary_time = [time, @delay].min
result = 0.5 * primary_acc * primary_time * primary_time
secondary_time = time - @delay
if secondary_time > 0
primary_vel = primary_acc * @delay
secondary_acc = (@primary_force + @secondary_force) / @mass
result += primary_vel * secondary_time + 5 * secondary_acc * secondary_time *
secondary_time
end
result
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment