Elixir 从零 · 第 10 课(展开目录)
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 1025 分钟

真假不只靠 true

比较值,组合条件,认清 Elixir 怎样判断真假。

01 · 先看完整例子

在 IEx 判断能否买书

先运行购买判断,再比较最后两行。

Elixir
price = 36
balance = 50
in_stock = true

# 两个条件都为真,才可以买
if balance >= price and in_stock do
  :can_buy
else
  :wait
end

# 数值相等,但类型并不严格相同
1 == 1.0
1 === 1.0
先对照结果
  • 购买判断返回 :can_buy。
  • 1 == 1.0 是 true;1 === 1.0 是 false。
02 · 回头拆代码

从第一行往下读

  1. >= 先比较余额与价格,得到布尔值。
  2. and 再确认商品有货;两边都为 true 才走第一条路。
  3. 严格相等适合需要区分整数和浮点数的边界。
03 · 认清新符号

符号不是暗号

== / ===

前者比较值;后者还严格比较数字类型。

and / or / not

组合布尔条件。

&& / || / !

可处理任意真值,但要读清返回的可能不是布尔值。

04 · 代码里的概念

把名字和意思对上

01

真值

条件判断时,一个值被看作真还是假。Elixir 中只有 false 与 nil 为假。

02

严格相等

=== 不只比较数值,还区分整数与浮点数。

05 · 再说清楚

这些写法为什么有用

先看结果:余额够,而且商品有货,程序才返回 :can_buy。

Elixir 只有 false 和 nil 会被当作假。0、空字符串和空 list 都会被当作真。

and、or 要求左边是布尔值;&&、|| 接受任何值。写明确条件时,优先使用 and、or。

06 · 自己改一次

合上答案,动手

只有年龄不少于 12 且有票时,返回 :enter。

练习起点
age = 13
has_ticket = true

if ____ and ____ do
  :enter
else
  :stop
end

目标结果: 得到 :enter。

卡住了,再看提示

两个条件分别是 age >= 12 和 has_ticket。

运行过以后,再看一种答案
一种答案
age = 13
has_ticket = true

# 两个布尔条件同时成立
if age >= 12 and has_ticket do
  :enter
else
  :stop
end
想一想:空 list `[]` 在 Elixir 中会被当作假吗?

不会。只有 false 和 nil 会被当作假,[] 会被当作真。

带走

记住三句

  1. 1

    先让比较产生布尔值,再组合条件。

  2. 2

    == 与 === 的严格程度不同。

  3. 3

    只有 false 和 nil 为假。

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