Rust 是强类型语言,同时具有自动判断变量类型的能力。这一点和 Typescript 有点相似。
Rust 语言中有变量和常量之分,分别通过 let
和 const
关键字进行声明。
Rust 中的变量分为可变变量和不可变变量。
使用 let
关键字声明的变量默认是不可变变量,即赋值后不能再修改:
// 先声明,会赋值
let num;
num = 10;
// 声明时赋值
let name = "kw";
println!(name);
let num = 10;
num = 20;
// error[E0384]: cannot assign twice to immutable variable `num`
// 无法对不可变的变量进行重复赋值
要声明一个可变变量,需要再加上另一个关键字 mut
,mutable
可变的缩写:
let mut num = 10;
num = 20;
可变和不可变的机制,其实是提供了一种更安全的选择。毕竟 Rust 是一门号称更安全的语言,会尽可能在各个方面来保证代码的安全性。
上面不可变变量的用法很像常量,但是常量和不可变变量还是有点不一样的。
常量使用 const
关键字声明,且需要指定类型,常量名要求是大写:
// `i32` 表示 32位整数类型。
const NUM: i32 = 100
// 一旦赋值则不能被更改
NUM = 200 // ×
Rust 的数据类型有很多,包含了整数类型,浮点数类型,字符类型,布尔类型,元祖类型,数组类型,字符串类型等等。
本文要介绍的基本数据类型有:
整数类型
浮点类型
字符类型
布尔类型
JS 中只有 number 类型,包含了整数和浮点数。
Rust 中的数字分为整数类型和浮点数类型。
整数类型数字是不带有小数点的数字。表格中显示了 Rust 中的整数类型:
其中, i
是 integer
的首字母,表示有符号的整数, u
是 unsigned
的首字母,表示无符号类型。
默认的整数类型是 i32
。
// num_1 默认是 i32 类型
let num_1 = 10;
// 有符号的整数类型
let num_2: i32 = -10;
// 无符号的整数类型
let num_3: u32 = 10
一般不推荐使用 usize
和 isize
。isize
和 usize
两种整数类型的位长度取决于所运行的目标平台,如果是 32 位架构的处理器则使用 32 位位长度整型,以此类推。
浮点类型数字是带有小数点的数字。
在 Rust 中浮点类型数字也有两种基本类型: f32
和 f64
,分别表示 32 位和 64 位大小。
默认浮点类型是 f64
,在现代的 CPU 中它的速度与 f32
几乎相同,但精度更高。
浮点数字面量表示方式有如下几种:
// 默认是 f64 类型
let number_1 = 5.0
// f32 类型的浮点数
let number_2: f32 = 5.0
Rust 中的所有基元数字类型都支持数学运算,如加法、减法、乘法和除法。
let num_1 = 1 + 2; // 3
let num_2 = 9.99 - 0.99; // 9
let num_3 = 10 * 20; // 200
let num_4 = 81 / 9; //9
let num_5 = 17 % 5; // 2
对于 JSer 来说,注意这里是字符类型而不是字符串类型。
在 Rust 中字符类型属于基本数据类型,字符串属于复合数据类型。不像 JS 中,不区分字符和字符串,都叫做字符串类型。
字符类型用 char
表示,任何一个 unicode
编码的字符都是合法的字符值,比如单个的中文、英文、日文、emoji 表情符号等等。
字符类型字面量用单引号表示,双引号是用来表示字符串的。
let z: char = '中';
let e: char = 'E';
let emoji: char = '';
println!("{}", z);
println!("{}", e);
println!("{}", emoji);
打印结果:
布尔类型使用 bool
表示,只有两个值,true
和 false
。布尔值占用内存的大小为 1
个字节。
let t: bool = true;
let f: bool = false;
这应该是最简单的数据类型了吧?
本文简单介绍了 Rust 中声明变量的方式,主要是使用 let 和 const 关键字。然后介绍了四种基本数据类型,包括整数类型,浮点类型,字符类型和布尔类型。