README
A random collection of questionably useful Elixir tools.
log-macro
log
macro
hello = "Hello, World"
log(hello)
Logs:
hello: "Hello, World"
defcase-macro
defcase
macro
defcase fib do
0 -> 1
1 -> 1
n -> fib(n - 1) + fib(n - 2)
end
Expands to:
def fib(input) do
case input do
0 -> 1
1 -> 1
n -> fib(n - 1) + fib(n - 2)
end
end
defcond-macro
defcond
macro
defcond fizzbuzz(n) do
rem(n, 15) == 0 -> "FizzBuzz"
rem(n, 5) == 0 -> "Buzz"
rem(n, 3) == 0 -> "Fizz"
n -> n
end
Expands to:
def fizzbuzz(n) do
cond do
rem(n, 15) == 0 -> "FizzBuzz"
rem(n, 5) == 0 -> "Buzz"
rem(n, 3) == 0 -> "Fizz"
n -> n
end
end
defmulti-macro
defmulti
macro
defmulti fib_tail_rec do
n -> fib_tail_rec(n, 1, 1)
0, a, _ -> a
n, a, b -> fib_tail_rec(n - 1, b, a + b)
end
Expands to:
def fib_tail_rec(n), do: fib_tail_rec(n, 1, 1)
def fib_tail_rec(0, a, _), do: a
def fib_tail_rec(n, a, b), do: fib_tail_rec(n - 1, b, a + b)
map-destructuring
Map destructuring
destructure_map map do
string_key <- "string_key"
atom_key <- :atom_key
tuple_key <- {1, 2}
map_key <- %{key: "value"}
missing_key <- :does_not_exist
end
Expands to:
string_key = Map.get(map, "string_key")
atom_key = Map.get(map, :atom_key)
tuple_key = Map.get(map, {1, 2})
map_key = Map.get(map, %{key: "value"})
missing_key = Map.get(map, :does_not_exist)
ternary-operator
Ternary operator \\
rem(n, 2) == 0 \\ "even" \\ "odd"
Expands to:
if rem(n, 2) == 0, do: "even", else: "odd"