Trivial Example: Compose a meet & greet in Ruby
class Greeter
class << self
def meet(person, &block)
yield person
end
# Greet everyone except Johnny
def greet(person, &block)
if person == "Johnny"
yield "Can't talk right now, Johnny"
else
yield "Hello #{person}!"
end
end
end
end
Greeter.meet "Johnny" do |person|
Greeter.greet person do |message|
puts message
end
end
Greeter.meet "Brooke" do |person|
Greeter.greet person do |message|
puts message
end
end
The same functionality in Elixir:
defmodule Greeter do
def meet(person), do: person
def greet("Johnny"), do: "Can't talk right now, Johnny"
def greet(person), do: "Hello #{person}!"
end
"Johnny" |> Greeter.meet |> Greeter.greet |> IO.puts
"Brooke" |> Greeter.meet |> Greeter.greet |> IO.puts
@oldfartdeveloper my example is contrived to show composition. I wasn't trying to make the Ruby look like Elixir as much as follow the composition. I could argue to that most Rubyist would write that code a little differently, especially once more data transformation was needed. The problem with trivial examples are there are a number of ways to solve the problem but the one you use depends on what you are trying to show.