💧 Elixir
概述:Elixir 由 José Valim 于 2011 年创建,运行在 Erlang 虚拟机(BEAM)之上。它结合了 Erlang 的并发能力和 Ruby 的优雅语法,是构建高可用、可伸缩分布式系统的现代选择。Phoenix 框架是 Elixir 最著名的 Web 框架。
概述
Elixir 属于 函数式 & 分布式语言 分类。Elixir 继承了 Erlang 的容错能力,同时提供了更现代的语法和宏系统。
语言特点
- Erlang VM:运行在 BEAM 虚拟机上,继承 Erlang 的高并发和容错特性
- 优雅语法:受 Ruby 启发,代码简洁可读
- 不可变数据:所有数据结构不可变,天然线程安全
- 宏系统:编译期元编程,DSL 领域语言
- Phoenix 框架:高性能实时 Web 框架,LiveView 革命性前端方案
Hello World
elixir
IO.puts "Hello, World!"基础语法
变量与模式匹配
elixir
# 变量绑定(可重新绑定,与 Erlang 不同)
name = "Elixir"
age = 13
# 模式匹配
{x, y} = {1, 2} # x = 1, y = 2
[head | tail] = [1, 2, 3] # head = 1, tail = [2, 3]
# Pin 操作符(防止重新绑定)
^name = "Elixir" # 匹配成功
^name = "Other" # 匹配失败数据结构
elixir
# 列表
list = [1, 2, 3]
# 元组
tuple = {:ok, "success"}
# 关键字列表
kw = [name: "Alice", age: 30]
# Map
person = %{name: "Alice", age: 30}
person.name # "Alice"
# MapSet
set = MapSet.new([1, 2, 3])控制流
elixir
# case
case result do
{:ok, data} -> "Success: #{data}"
{:error, reason} -> "Error: #{reason}"
end
# cond
cond do
temperature > 30 -> "Hot"
temperature > 20 -> "Warm"
true -> "Cold"
end
# if/unless
if age >= 18 do
"Adult"
else
"Minor"
end
# with(链式模式匹配)
with {:ok, user} <- fetch_user(id),
{:ok, posts} <- fetch_posts(user) do
render_posts(posts)
else
{:error, _} -> handle_error()
end函数
elixir
# 命名函数(必须在模块中)
defmodule Math do
def add(a, b), do: a + b
# 多个子句和守卫
def factorial(0), do: 1
def factorial(n) when n > 0, do: n * factorial(n - 1)
# 私有函数
defp helper(x), do: x * 2
end
# 匿名函数
square = fn x -> x * x end
square.(5) # 25
# 简写
square = &(&1 * &1)管道操作符
elixir
# |> 将前一个表达式的结果作为后一个函数的第一个参数
"hello"
|> String.upcase()
|> String.split("")
|> Enum.join("-")
# => "H-E-L-L-O"
# 等价于
Enum.join(String.split(String.upcase("hello"), ""), "-")并发与进程
elixir
# 创建进程
pid = spawn(fn ->
receive do
{:hello, name} -> IO.puts("Hello, #{name}!")
end
end)
# 发送消息
send(pid, {:hello, "Elixir"})
# Task
task = Task.async(fn -> expensive_computation() end)
result = Task.await(task)应用领域
- Web 开发:Phoenix 高性能 Web 框架
- 实时应用:Phoenix LiveView 实时交互(无需 JavaScript 框架)
- 分布式系统:高可用分布式服务
- 消息队列:RabbitMQ 管理和监控
- 嵌入式:Nerves 嵌入式开发框架
- 数据处理:Flow、Broadway 数据管道
开发环境搭建
- 安装 Elixir:
sudo apt install elixir或使用 asdf 版本管理器 - 验证:
elixir --version - 交互式 Shell:
iex - 构建工具:Mix(内置)
- 创建项目:
mix new my_project或mix phx.new my_app - 编辑器:VS Code + ElixirLS 扩展
学习路线
- 入门阶段:基础语法 → 模式匹配 → 不可变数据 → 模块与函数
- 进阶阶段:管道操作符 → 并发编程 → OTP → 错误处理
- 实战阶段:Phoenix Web 开发 → LiveView → 数据库集成
- 高级阶段:宏系统 → 分布式部署 → 性能调优