Higher Order Procedures

Using Higher Order Procedures in Ruby

Trotter Cashion

What is a Higher Order Procedure?

Procedures as Data

Procs

Blocks

A Simple Higher Order Procedure

Beyond the Basics

Sum Odd Numbers

class Range
  def sum_odd_numbers
    result = 0
    self.each do |i|
      if i % 2 == 1
        result += i
      end
    end
    return result
  end
end
  

Sum Even Numbers

Respect DRY

class Range
  def sum_if(&predicate)
    result = 0
    self.each do |i|
      result += i if yield(i)
    end
    return result
  end
  def sum_even_numbers
    sum_if {|i| i % 2 == 0}
  end
  def sum_odd_numbers
    sum_if {|i| i % 2 == 1}
  end
end
  

Advantages

Procs and Blocks Are Closures

Extras: Can Be Used To Make Data

Can Even Be Used To Create Objects

Gotchas

Thank You