Skip to content

💧 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 数据管道

开发环境搭建

  1. 安装 Elixir:sudo apt install elixir 或使用 asdf 版本管理器
  2. 验证:elixir --version
  3. 交互式 Shell:iex
  4. 构建工具:Mix(内置)
  5. 创建项目:mix new my_projectmix phx.new my_app
  6. 编辑器:VS Code + ElixirLS 扩展

学习路线

  1. 入门阶段:基础语法 → 模式匹配 → 不可变数据 → 模块与函数
  2. 进阶阶段:管道操作符 → 并发编程 → OTP → 错误处理
  3. 实战阶段:Phoenix Web 开发 → LiveView → 数据库集成
  4. 高级阶段:宏系统 → 分布式部署 → 性能调优

返回首页 | 查看所有语言

编程语言技术文档