From e1f3df96e2a56d8192484d9b5b02f4c111409fc4 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 30 Aug 2017 01:24:56 +0800 Subject: [PATCH] elixir: try to get a hello world in --- elixir.md | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/elixir.md b/elixir.md index 3509bed9b..fc236e3fd 100644 --- a/elixir.md +++ b/elixir.md @@ -7,7 +7,102 @@ updated: 201708 weight: -10 --- -## Reference +## Getting started +{: .-three-column} + +### Hello world +{: .-prime} + +```elixir +# hello.exs +defmodule Greeter do + def greet(name) do + IO.puts "Hello, " <> name <> "!" + end +end + +Greeter.greet("world") +``` + +```bash +elixir hello.exs +# Hello, world! +``` +{: .-setup} + +### Variables + +```elixir +age = 23 +``` + +### Maps + +```elixir +user = %{ + name: "John", + city: "Melbourne" +} +``` + +```elixir +IO.puts "Hello, " <> user.name +``` +{: .-setup} + +### Lists + +```elixir +users = [ "Tom", "Dick", "Harry" ] +``` +{: data-line="1"} + +```elixir +Enum.map(user, fn user -> + IO.puts "Hello " <> user +end) +``` + +### Piping + +```elixir +source +|> transform(:hello) +|> print() +``` +{: data-line="2,3"} + +```elixir +# Same as: +print(transform(source, :hello)) +``` + +These two are equivalent. + +### Pattern matching + +```elixir +user = %{name: "Tom", age: 23} +%{name: username} = user +``` +{: data-line="2"} + +This sets `username` to `"Tom"`. + +### Pattern matching in functions + +```elixir +def greet(%{name: username}) do + IO.puts "Hello, " <> username +end + +user = %{name: "Tom", age: 23} +``` +{: data-line="1"} + +Pattern matching works in function parameters too. + +## Types ### Primitives