README.md

A random collection of questionably useful Elixir tools.

## `log` macro

```elixir
hello = "Hello, World"
log(hello)
```

Logs:

```elixir
hello: "Hello, World"
```

## `defcase` macro

```elixir
defcase fib do
  0 -> 1
  1 -> 1
  n -> fib(n - 1) + fib(n - 2)
end
```

Expands to:

```elixir
def fib(input) do
  case input do
    0 -> 1
    1 -> 1
    n -> fib(n - 1) + fib(n - 2)
  end
end
```

## `defcond` macro

```elixir
defcond fizzbuzz(n) do
  rem(n, 15) == 0 -> "FizzBuzz"
  rem(n, 5) == 0 -> "Buzz"
  rem(n, 3) == 0 -> "Fizz"
  n -> n
end
```

Expands to:

```elixir
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

```elixir
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:

```elixir
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)
```

## Ternary operator `\\`

```elixir
rem(n, 2) == 0 \\ "even" \\ "odd"
```

Expands to:

```elixir
if rem(n, 2) == 0, do: "even", else: "odd"
```