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

先认六种值

从整数、浮点数、布尔值、nil、atom 和字符串开始。

01 · 先看完整例子

在 IEx 里认识值

一行只认一种值。先看外形,再看 IEx 给出的结果。

Elixir
# 数字、布尔值和 nil
12
12.5
true
nil

# atom 与字符串是不同类型
:ok
"你好,阿青"
:ok == "ok"

# Elixir 字符串是 UTF-8 binary
<<"长安">> == "长安"
先对照结果
  • 前六段依次得到整数、浮点数、布尔值、nil、atom 和字符串。
  • :ok 原样返回;"你好,阿青" 也原样返回。
  • atom 与字符串的比较返回 false,因为它们不是同一种值。
  • <<"长安">> == "长安" 返回 true,因为 Elixir 字符串是 UTF-8 binary。
02 · 回头拆代码

从第一行往下读

  1. 12 和 12.5 都是数字;有没有小数点,让它们分成整数和浮点数。
  2. true、false 用来表示真假;nil 表示没有值。三者不要混成一类。
  3. 冒号开头的是 atom,双引号包住的是字符串。因此 :ok 不等于 "ok"。
  4. <<"长安">> 使用 binary 语法写出同一段 UTF-8 文字,所以它等于字符串 "长安"。
03 · 认清新符号

符号不是暗号

:

放在名字前面,组成 atom。例如 :ok。

" "

双引号包住文字,组成字符串。

==

比较左右两个值是否相等,结果是 true 或 false。

<<>>

包住 binary 内容。Elixir 的 UTF-8 字符串也是 binary。

04 · 代码里的概念

把名字和意思对上

01

整数

没有小数点的数字,如 12、0 和 -3。

02

浮点数

带小数点的数字,如 12.5。先把它理解为可以表示小数的数。

03

布尔值

只有 true 和 false 两个值,用来回答真或假。

04

nil

表示这里没有值。它不是数字 0,也不是空字符串。

05

atom

以冒号开头的标签,如 :ok、:red。它的名字就是它的值。

06

字符串

双引号包住的文字,如 "长安"。可以包含中文和空格。

05 · 再说清楚

这些写法为什么有用

值是代码正在处理的东西。年龄可以是整数,身高可以是小数,名字可以是字符串。

类型说明一种值能参加哪些操作。数字能相加,字符串能拼接。类型不同,不代表谁更高级,只代表用途不同。

:ok 是 atom,常用作标签;"ok" 是字符串,是两个字母组成的文字。它们看起来相近,却不是同一种值。

Elixir 字符串本身就是 UTF-8 binary。<<"长安">> 与 "长安" 是同一个值;<<>> 还可以写出更一般的 binary 和 bitstring。

06 · 自己改一次

合上答案,动手

分三行写出城市、天气和是否下雨。这里先只写值,不给它们起名字。

练习起点
# 城市是一段文字
____
# 天气是一个标签
____
# 今天没有下雨
____

目标结果: 三行依次得到 "成都"、:cloudy、false。

卡住了,再看提示

文字用双引号;标签以冒号开头;真假写 true 或 false。

运行过以后,再看一种答案
一种答案
# 城市是一段文字
"成都"
# 天气是一个标签
:cloudy
# 今天没有下雨
false
想一想:`nil` 和 `false` 是同一个值吗?

不是。它们是两个不同的值;不过在条件判断里,两者都会被当作假。

带走

记住三句

  1. 1

    先看一个值是什么,再决定怎样处理它。

  2. 2

    :ok 是 atom,"ok" 是字符串。

  3. 3

    nil 表示没有值,不等于 0 或空文字。

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