Elixir 从零 · 第 26 课(展开目录)
01 · 先让代码说话02 · 先认六种值03 · 把值装起来04 · 从旧 list 生成新 list05 · 让形状对上06 · 用 case 做选择07 · 把文字安全变成整数08 · 拆开 &1 和管道09 · 把代码放进项目10 · 真假不只靠 true11 · 走进嵌套数据12 · 一字不一定一字节13 · 让函数按形状接活14 · 把一列数收成一个值15 · 给不同问题选不同路16 · 给 map 一张名片17 · 让项目自己验答案18 · 让成功和失败长得一样19 · 读写文件先管好路20 · 只算眼前需要的21 · 同一句话,不同做法22 · 先约好模块会做什么23 · 把数据形状写在门口24 · 测试不只看一条好路25 · 把项目磨成一个命令26 · 定下小项目边界27 · 把真实文字洗干净28 · 只开三扇门29 · 把约定钉在代码旁30 · 打包,也留下脚印31 · 照任务书交卷
ELIXIR · 作品 · LESSON 2630 分钟

定下小项目边界

为“行迹”文字统计命令写一页任务书,只做读文件与计数。

01 · 先看完整例子

先写一份最小任务书

任务书可写进 README.md;命令在系统终端运行。

Elixir
# 输入:一个 UTF-8 文本文件路径
# 成功:打印 lines、words、chars 三行
# 失败:路径不存在或内容不是有效 UTF-8

mix new trail_stats
cd trail_stats
mix test
先对照结果
  • 项目创建成功,默认测试通过。
02 · 回头拆代码

从第一行往下读

  1. 用一句话描述用户要完成的事,不写实现术语。
  2. 列出成功与失败边界,给每项一个可观察结果。
  3. 创建项目后先跑原始测试,确认环境干净。
03 · 认清新符号

符号不是暗号

mix new trail_stats

创建本阶段使用的项目。

stdin / argv

本项目选择命令参数 argv,不从标准输入读取。

exit status

命令成功或失败交给系统的数字状态。

04 · 代码里的概念

把名字和意思对上

01

项目边界

这次明确要做与不做的范围,防止练习越长越散。

02

验收例子

从使用者角度写出的输入、命令与可观察结果。

05 · 再说清楚

这些写法为什么有用

项目先别急着堆功能。我们只做一件事:读取 UTF-8 文本文件,输出非空行数、词数和字符数。

任务书应写出不做什么。本项目不处理目录、不改原文件、不做网页,也不启动进程系统。

先定一个成功例子与两个失败例子。以后每个模块都为这些验收结果服务。

06 · 自己改一次

合上答案,动手

补全本项目明确不做的两件事。

练习起点
不做:
- 扫描整个 ____
- 修改输入 ____

目标结果: 写出“不扫描整个目录、不修改输入文件”。

卡住了,再看提示

两个空分别是“目录”和“文件”。

运行过以后,再看一种答案
一种答案
不做:
- 扫描整个目录
- 修改输入文件
想一想:为什么在写代码前先列“不做什么”?

它守住练习范围,让每次决定都能回到同一个目标。

带走

记住三句

  1. 1

    项目只解决一个清楚问题。

  2. 2

    先写可观察结果,再选实现。

  3. 3

    不做清单与功能清单同样重要。

本课结束代码也跑过一次,就把这一课收好。