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 · 回头拆代码
从第一行往下读
12和12.5都是数字;有没有小数点,让它们分成整数和浮点数。true、false用来表示真假;nil表示没有值。三者不要混成一类。- 冒号开头的是 atom,双引号包住的是字符串。因此
:ok不等于"ok"。 <<"长安">>使用 binary 语法写出同一段 UTF-8 文字,所以它等于字符串"长安"。
03 · 认清新符号
符号不是暗号
:放在名字前面,组成 atom。例如 :ok。
" "双引号包住文字,组成字符串。
==比较左右两个值是否相等,结果是 true 或 false。
<<>>包住 binary 内容。Elixir 的 UTF-8 字符串也是 binary。
04 · 代码里的概念
把名字和意思对上
整数
没有小数点的数字,如 12、0 和 -3。
浮点数
带小数点的数字,如 12.5。先把它理解为可以表示小数的数。
布尔值
只有 true 和 false 两个值,用来回答真或假。
nil
表示这里没有值。它不是数字 0,也不是空字符串。
atom
以冒号开头的标签,如 :ok、:red。它的名字就是它的值。
字符串
双引号包住的文字,如 "长安"。可以包含中文和空格。
05 · 再说清楚
这些写法为什么有用
值是代码正在处理的东西。年龄可以是整数,身高可以是小数,名字可以是字符串。
类型说明一种值能参加哪些操作。数字能相加,字符串能拼接。类型不同,不代表谁更高级,只代表用途不同。
:ok 是 atom,常用作标签;"ok" 是字符串,是两个字母组成的文字。它们看起来相近,却不是同一种值。
Elixir 字符串本身就是 UTF-8 binary。<<"长安">> 与 "长安" 是同一个值;<<>> 还可以写出更一般的 binary 和 bitstring。
06 · 自己改一次
合上答案,动手
分三行写出城市、天气和是否下雨。这里先只写值,不给它们起名字。
练习起点
# 城市是一段文字
____
# 天气是一个标签
____
# 今天没有下雨
____目标结果: 三行依次得到 "成都"、:cloudy、false。
卡住了,再看提示
文字用双引号;标签以冒号开头;真假写 true 或 false。
运行过以后,再看一种答案
一种答案
# 城市是一段文字
"成都"
# 天气是一个标签
:cloudy
# 今天没有下雨
false想一想:`nil` 和 `false` 是同一个值吗?
不是。它们是两个不同的值;不过在条件判断里,两者都会被当作假。
带走
记住三句
- 1
先看一个值是什么,再决定怎样处理它。
- 2
:ok是 atom,"ok"是字符串。 - 3
nil表示没有值,不等于 0 或空文字。
本课结束代码也跑过一次,就把这一课收好。