第 2 章:名称、值与类型

假设要输出一本书的名称和出版年份。字符串适合保存书名,整数适合保存年份;给它们起名字后,就能在后面的表达式中反复使用。

声明类型并给出值

「年份」乃「整数」也。
「年份」者「二零二六」也。

第一行声明 「年份」 的类型是 「整数」。第二行定义它的值是 2026。读代码时,可以把 理解为“类型是”,把 理解为“定义为”。这两行都以 也。 结束。

类型决定一个值能用在哪些地方。例如,整数可以交给整数加法函数,字符串可以交给文本拼接函数。编译器会检查这些使用是否一致。

数字按十进制数位书写:「一三」 是 13,「二零二六」 是 2026。不要写成日常读法 「十三」;它会被当作名称。

输出带有数字的文字

将练习包的入口替换为以下完整程序:

寻观「标准库」之书。

「年份」乃「整数」也。
「年份」者「二零二六」也。

「书名」乃「字符串」也。
「书名」者『豫言入门』也。

「打印行」于(「字符串拼接」于「书名」于
    (「字符串拼接」于『,出版年份:』于(「整数表示」于「年份」)))。

构建并运行后输出:

豫言入门,出版年份:2026

最后一条语句从内层往外读:「整数表示」 把整数变成字符串;内层 「字符串拼接」 把年份接到说明文字后;外层再接上书名;「打印行」 输出结果。全角括号 () 标出了每一步的范围。

不能把整数直接传给 「字符串拼接」。屏幕上都能显示为文字,不等于它们在程序中具有同一种类型。

区分名称、字面量和注释

写法 编译器如何理解
「年份」 查找这个名称绑定的值
「二零二六」 整数字面量 2026
『二零二六』 字符串,内容是四个汉字
「:文言:记其年。汉语:记录年份。:」 注释,不参与计算

普通定义建立的是不可变绑定。后文使用 「年份」,取得的仍是定义时的那个值。第十二章会介绍需要修改状态时使用的引用。

试一次类型错误

把第一行类型声明中的 「整数」 改为 「字符串」,保留整数定义,运行 ./yy豫构 类型检查 教程练习。声明和定义不一致,应当报错。恢复类型后,再把 「年份」 直接传给 「打印行」,检查为什么仍然需要 「整数表示」

上一章 · 下一章:定义和调用函数 · 目录