Today I read this good post of a series about Elixir. Share it.
# FizzBuzz - Write a program that prints the numbers from 1 to 100. But for multiples of 3, print "Fizz" instead of the number and for the multiples of 5, print "Buzz". For numbers which are multiples of both 3 and 5, print "FizzBuzz". # First, the JavaScript implementation const fizzBuzz = (num) => { if (num % 3 === 0 && num % 5 === 0) return "FizzBuzz"; if (num % 3 === 0) return "Fizz"; if (num % 5 === 0) return "Buzz"; return num; }; const range = (num) => [ ...Array(num).keys() ].map(num => num + 1); # This helper function simply creates an array of numbers - i.e range(100) == [1, 2, 3, ..., 100] console.log(range(100).map(fizzBuzz)); # Next, the Elixir implementation fizz_buzz_result = fn (0, 0, _) -> "FizzBuzz" (0, _, _) -> "Fizz" (_, 0, _) -> "Buzz" (_, _, num) -> num end fizz_buzz = fn (num) -> fizz_buzz_result.(rem(num, 3), rem(num, 5), num) end IO.puts(Enum.map(1..100, fizz_buzz)) # I think one of the most interesting aspects of the Elixir implementation is that there is NO conditional logic involved. # Instead of using `if / else` logic, Elixir takes advantage of pattern matching and multiple clauses to produce the same effect!
Chapter 1 and 2 — OOP, Functional Programming, and Pattern Matching Chapter 3 — Immutability Chapter 4 — Basic Elixir Types Chapter 5 — Anonymous Functions (this post) Chapter 6 — Modules and Named Functions (coming soon) Chapter 7 — Lists and Recursion (coming soon) Chapter 8 and 9 — Maps, Structs, and Keyword Lists in Detail (coming soon) Chapter 10 — Processing Collections (coming soon) Chapter 11 — Strings and Binaries (coming soon) Chapter 12 — Control Flow (coming soon)
Top comments (0)