Erlang 从零 · 第 10 课(展开目录)
01 · 先打开 erl02 · 先认常见 term03 · 分清两种文字04 · 变量只接一次05 · 拆开一列,再筛一次06 · 把文字安全变成整数07 · 用 case 选一条路08 · 让函数继续走09 · 把代码放进模块10 · 条件必须说真话11 · 一层一层取数据12 · 文字先说清编码13 · 让函数子句排好队14 · 带着累加器往前走15 · 先看值,再选路16 · 给模块立规矩17 · 让 rebar3 管项目18 · 让结果有固定形状19 · 把磁盘当成会失败的邻居20 · 把函数交给 list21 · record 留在院里22 · 先写模块之间的约定23 · 把 term 形状写出来24 · 小测试与整段路25 · 把应用磨成命令26 · 先把小项目圈住27 · 把真实文件洗干净28 · 公开入口越少越稳29 · 把约定留在源码旁30 · 打包,也留下线索31 · 按最初任务交卷
ERLANG · 基础 · LESSON 1025 分钟
条件必须说真话
比较 term,组合布尔条件,分清相等与严格相等。
01 · 先看完整例子
在 erl 判断能否买书
在 shell 中分三段运行,注意每段最后的句点。
Erlang
Price = 36,
Balance = 50,
InStock = true,
%% 两边都必须得到布尔值
case Balance >= Price andalso InStock of
true -> can_buy;
false -> wait
end.
%% 数值相等,但类型不严格相同
1 == 1.0.
1 =:= 1.0.先对照结果
- 购买判断得到
can_buy。 1 == 1.0是true;1 =:= 1.0是false。
02 · 回头拆代码
从第一行往下读
>=先产生true或false。andalso只在左边为真时检查右边。- 需要区分整数与浮点数时使用严格相等。
03 · 认清新符号
符号不是暗号
== / =:=前者做数值宽松比较,后者做严格比较。
andalso / orelse短路组合布尔条件。
=/=严格不相等。
04 · 代码里的概念
把名字和意思对上
布尔条件
结果必须是 atom true 或 false 的判断。
严格相等
=:= 同时比较值与类型。
05 · 再说清楚
这些写法为什么有用
Erlang 的条件不是“差不多为真”就行。if guard 和 andalso 等布尔运算期待真正的 true 或 false。
== 比较数值时允许整数与浮点数相等;=:= 还要求类型相同。
andalso、orelse 会短路。前面已经能决定答案时,后面的表达式不会运行。
06 · 自己改一次
合上答案,动手
年龄不少于 12 且有票时返回 enter。
练习起点
Age = 13,
HasTicket = true,
case ____ andalso ____ of
true -> enter;
false -> stop
end.目标结果: 得到 enter。
卡住了,再看提示
两个条件是 Age >= 12 与 HasTicket。
运行过以后,再看一种答案
一种答案
Age = 13,
HasTicket = true,
%% 两个条件同时为 true
case Age >= 12 andalso HasTicket of
true -> enter;
false -> stop
end.想一想:数字 `0` 能直接当成 Erlang 的 `if` 条件吗?
不能。Erlang 没有把 0、空 list 等值自动换成真假;条件应明确得到 true 或 false。
带走
记住三句
- 1
条件要明确返回布尔值。
- 2
==与=:=的严格程度不同。 - 3
andalso与orelse会短路。
本课结束代码也跑过一次,就把这一课收好。