💧 Elixir
Функциональный язык на BEAM: типы, pipe, паттерн-матчинг, процессы.
Шпаргалки · Программирование · #elixir #beam #functional
IDE и запуск
VS Code + ElixirLS, IntelliJ. iex (интерактив), elixir file.exs, проекты mix new app, mix test, mix deps.get. Пакеты: Hex.
Типы данных
1; 3.14; true; nil; :atom; "строка"
[1, 2, 3] # связный список
{:ok, 1} # кортеж
%{a: 1, "b" => 2} # map
[a: 1, b: 2] # keyword list
~r/\d+/ # regex
Операторы
+ - * /, div, rem, == !=, === !==, and or not (строго bool), && || !, <> (строки), ++ (списки), |> (pipe), = (сопоставление, не присваивание).
Циклы
Циклов нет: рекурсия, Enum и for.
for x <- 1..5, rem(x, 2) == 1, do: x * x
Enum.map([1, 2], &(&1 * 2))
Enum.reduce(1..3, 0, fn x, acc -> x + acc end)
Функции
defmodule Math do
def add(a, b \\ 0), do: a + b
def fact(0), do: 1
def fact(n) when n > 0, do: n * fact(n - 1)
end
sq = fn x -> x * x end
[1, 2, 3] |> Enum.map(sq) |> Enum.sum()
Встроенные
IO.puts, inspect, length, hd, tl, is_integer, String.upcase, Enum.sort, Map.get, elem.
Асинхронность (процессы)
pid = spawn(fn -> receive do msg -> IO.inspect(msg) end end)
send(pid, :hello)
Task.async(fn -> 1 + 1 end) |> Task.await()
Надёжность: GenServer, Supervisor.
Коллекции
Enum, Map, List, Keyword, MapSet, ленивые Stream.
Библиотеки по задачам
Phoenix (веб, LiveView), Ecto (БД), Oban (фоновые задачи), Broadway (потоки данных), Nx (ML), ExUnit (тесты).