下一步:先看懂 BEAM 进程
你已经写过模块、文件处理、测试和命令行作品。不必再回起跑线,直接看普通函数何时该变成有状态、会收消息的进程。
进入进程与信箱 →31 节短课分成 Scratch、Foundation、Intermediate 和 Project。每课先跑一个完整例子,再拆语法、改输入、做练习。Foundation 完成后即可进入 BEAM;也可以继续做完单语言项目。
语言线先把顺序代码写稳。进程、监督与分布式留到 BEAM 主线。Java、Python、JavaScript 对照只在容易带错直觉的地方出现。
每课仍然先看要做什么,再把完整例子复制到 IEx。Scratch 负责敢运行,Foundation 负责独立写模块,Intermediate 处理真实输入,Project 把它们合成一个作品。
看懂输入和结果。完成一段 5–15 行的小任务。
打开 IEx,输入表达式,分清代码、结果和报错。
从整数、浮点数、布尔值、nil、atom 和字符串开始。
用 list、tuple 和 map 收好一组数据。
先绑定一列值,再用 for comprehension 产生新 list。
把 `=` 当作匹配,拆开 tuple、list 和 map。
让一个值依次匹配分支,再用 guard 补充条件。
用 trim、匿名函数和 try/rescue 处理合法与错误输入。
先写完整匿名函数,再读 capture、Enum 和 `|>`。
写一个模块,认识 def、文件和 Mix,再走向 BEAM。
补齐集合、函数、控制流、模块和基础测试。
比较值,组合条件,认清 Elixir 怎样判断真假。
从 map 里的 list 取值,再安全地更新深处数据。
用 UTF-8 处理中文,分清字节、码点和人眼看到的字符。
用命名函数、多个子句和 guard 把分支写在函数门口。
先读递归累加器,再用 `Enum.reduce/3` 写同一件事。
按数据形状选 `case`,按条件选 `cond`,按结果串联选 `with`。
用 struct 固定领域数据的名字,再用模块属性写文档与默认值。
创建 Mix 项目,写第一个模块,再用 ExUnit 守住结果。
处理文件、错误边界、类型约定和项目工具。
用 `{:ok, value}` 与 `{:error, reason}` 建立可组合的结果约定。
用 `Path` 拼路径,用 `File` 返回值处理磁盘成功与失败。
用 `Stream` 延迟 map 与 filter,到了 `Enum` 才真正取结果。
用 protocol 为不同数据类型定义同一项能力。
用 behaviour 和 callback 约定模块接口,再替换具体实现。
用 `@type` 与 `@spec` 记录约定,再让 Dialyzer 寻找矛盾。
用 `describe`、`setup` 和边界用例组织可读的 ExUnit 测试。
用 Mix 格式化、检查、构建 escript,并从终端运行。
从需求、测试走到可运行、可打包的小程序。