1、变量与可变性:
在Rust语言中,变量默认是不可变的,所以一旦变量被绑定到某个值上面,这个值就再也无法被改变。
可以通过在声明的变量名称前添加mut
关键字来使其可变。除了使变量的值可变,mut
还会向阅读代码的人暗示其他代码可能会改变这个变量的值。
2、数据类型:
(1)、标量类型:
a、整数:
在Rust中的整数类型:
在Rust中的整数字面量:
在Rust中,默认使用的类型是i32
。
b、浮点数:
在Rust中的浮点数分为f32
和f64
两种类型,其分别对应单精度浮点数和双精度浮点数。
c、布尔值:
Rust的布尔类型只拥有两个可能的值:true
和false
,它会占据单个字节的空间大小。可以使用bool
来表示一个布尔类型。
d、字符:
在Rust中,char类型被用于描述语言中最基础的单个字符。
Rust中的char类型占4字节,是一个Unicode标量值,这也意味着
它可以表示比ASCII多得多的字符内容。拼音字母、中文、日文、韩文、零长度空白字符,甚至是emoji表情都可以作为一个有效的char类型值。
(2)、复合类型:
a、元组:
元组是一种常见的复合类型,可以将其他不同类型的多个值组合进一个复合类型中。元组拥有固定的长度,无法在声明结束后增加或减少其中的元素数量。
- 解构:将元组中的数据解析出来的操作。例如:
fn main() {
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {}", y);
}
这段程序首先创建了一个元组,并将其绑定到了变量tup上。随后,let关键字的右侧使用了一个模式将tup拆分为3个不同的部分:x、y和z。最后,程序将变量y的值。
- 通过点号(.)来访问元组中的值,例如
fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
}
这段程序首先创建了一个元组x,随后又通过索引访问元组的各个元素,并将它们的值绑定到新的变量上。
b、数组:
可以在数组中存储多个值的集合。与元组不同,数组中的每一个元素都必须是相同的类型。Rust中的数组拥有固定的长度,一旦声明就再也不能随意更改大小。
在Rust中,你可以将以逗号分隔的值放置在一对方括号内来创建一个数组。
i、数组初始化的方法:
- 使用一对方括号,并在方括号中填写数组内所有元素的类型、一个分号及数组内元素的数量,例如:
let a: [i32; 5] = [1, 2, 3, 4, 5];//的i32便是数组内所有元素的类型,而分号之后的5则表明当前的数组包含5个元素。
- 假如你想要创建一个含有相同元素的数组,那么你可以在方括号中指定元素的值,并接着填入一个分号及数组的长度,例如:
let a = [3; 5];
ii、访问数组:
通过索引来访问一个数组中的所有元素,例如:
fn main() {
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
}
在这个例子中,first变量会被赋值为1,这正是数组中索引[0]对应的那个值。同样,second变量将获得数组中索引[1]对应的那个值,也就是2。
3、函数:
在Rust中,可以使用fn
来声明一个新的函数。
Rust中使用蛇形命名法来作为规范函数和变量名称的风格。蛇形命名法只使用小写字母来进行命名,并以下划线分割单词。
在Rust中,函数定义以fn
关键字开始并紧随函数名称与一对圆括号,另外还有一对花括号用于标识函数体开始和结尾的地方。
使用函数名加圆括号来调用函数。
(1)、函数参数:
当函数存在参数时,需要在调用函数的时候为这些参数提供具体的值。
在函数签名中,必须显式地声明每个参数的类型。由于类型被显式地注明,因此编译器不需要通过其他部分的代码进行推导就能明确地知道编程者的意图。
(2)、函数体中的语句和表达式:
在Rust中,语句和表达式为两个不同的概念。语句是指那些执行操作但是不返回值的指令,表达式是指那些进行计算并产生一个值作为结果的指令。
在表达式的结尾没有;
,而在语句的结尾有;
,当在表达式的结尾加上;
,表达式就会变成语句,而不会返回任何值。
(3)、函数的返回值:
函数可以调用它的代码返回值,不用为返回值命名,但是需要在箭头符号(->)的后面声明它的类型。在Rust中,函数的返回值等同于函数体最后一个表达式的值。也可以使用return
关键字并指定一个值来提前从函数中返回,但大多数函数都是隐式地返回了最后的表达式。
4、控制流:
通过条件来执行或重复执行某些代码,在Rust中,用来控制程序执行流的结构主要就是if表达式
与循环表达式
。
(1)、if表达式:
if表达式允许我们根据条件执行不同的代码分支。
(2)、使用循环重复执行代码:
a、使用loop重复执行:
可以使用loop关键字来指示Rust反复执行某一块代码,直到显式地声明退出为止。
b、while条件循环:
在每次执行之前都判断一次条件,假如条件为真则执行代码片段,假如条件为假或在执行过程中遇到break
就退出当前循环。
c、for循环:
示例:
fn main() {
let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("the value is: {}", element);
}
}
使用for循环遍历数组。