变量和可变性
rust使用let声明变量,变量默认是不可改变的。通过在let后面加上mut,可以声明可变变量。可以在变量名后加:和类型名,来显式声明变量类型,例如:
let a:u32 = 1;
常量
常量使用const声明,变量名一般约定使用大写。
隐藏
不同的作用域如果有重叠,且重叠区域内有同名的变量,那么更小的作用域里变量会隐藏外部作用域的变量。
数据类型
Rust有两类数据类型子集:标量(scalar)和复合(compound)。
标量包括:整型、浮点型、布尔型、字符型。
整型根据有无符号和长度,可以分为
其中arch根据具体架构确定,32位为4字节,64位为8字节。
整型可以根据不同的进制,写成不同的字面值形式:
Rust 的浮点数类型是 f32
和 f64
,分别占 32 位和 64 位。默认类型是 f64
,因为在现代 CPU 中,它与 f32
速度几乎一样,不过精度更高。所有的浮点型都是有符号的。
Rust 中的所有数字类型都支持基本数学运算:加法、减法、乘法、除法和取余。整数除法会向零舍入到最接近的整数。
Rust 中的布尔类型有两个可能的值:true
和 false
。Rust 中的布尔类型使用 bool
表示。
Rust 的 char
类型是语言中最原生的字母类型。Rust用单引号声明 char
字面量,使用双引号声明字符串字面量。Rust 的 char
类型的大小为四个字节 (four bytes),并代表了一个 Unicode 标量值(Unicode Scalar Value)。
复合型可以将多个值合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。
元组使用包含在圆括号中的逗号分隔的值列表来创建一个元组。元组中的每一个位置都有一个类型。为了从元组中获取单个值,可以使用模式匹配(pattern matching)来解构(destructure)元组值。也可以使用点号(.
)后跟值的索引来直接访问。
不带任何值的元组有个特殊的名称,叫做 单元(unit) 元组。这种值以及对应的类型都写作 ()
,表示空值或空的返回类型。如果表达式不返回任何其他值,则会隐式返回单元值。
数组中的每个元素的类型必须相同。Rust 中的数组与一些其他语言中的数组不同,Rust 中的数组长度是固定的。当你想要在栈(stack)而不是在堆(heap)上为数据分配空间,或者是想要确保总是有固定数量的元素时,数组非常有用。但是数组并不如 vector 类型灵活。vector 类型是标准库提供的一个 允许 增长和缩小长度的类似数组的集合类型。当不确定是应该使用数组还是 vector 的时候,那么很可能应该使用 vector。
可以像这样编写数组的类型:在方括号中包含每个元素的类型,后跟分号,再后跟数组元素的数量。
let a: [i32; 5] = [1, 2, 3, 4, 5];
你还可以通过在方括号中指定初始值加分号再加元素个数的方式来创建一个每个元素都为相同值的数组:
let a = [3; 5];
可以使用索引来访问数组的元素。
函数
Rust 中通过输入 fn
后面跟着函数名和一对圆括号来定义函数。参数是特殊变量,是函数签名的一部分。在函数签名中,必须 声明每个参数的类型。函数体由一系列的语句和一个可选的结尾表达式构成。语句(Statements)是执行一些操作但不返回值的指令。 表达式(Expressions)计算并产生一个值。
函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->
)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return
关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。
注释
使用//开始注释,并持续到本行的结尾。对于超过一行的注释,需要在每一行前都加上 //。
控制流
if条件语句
包括if, else if, else。因为 if
是一个表达式,我们可以在 let
语句的右侧使用它。
loop无条件循环语句
包括loop, continue, break。因为loop是一个表达式,我们可以在 let
语句的右侧使用它。只需要在loop里通过break返回值。如果存在嵌套循环,break
和 continue
应用于此时最内层的循环。你可以选择在一个循环上指定一个 循环标签(loop label),然后将标签与 break
或 continue
一起使用,使这些关键字应用于已标记的循环而不是最内层的循环:
fn main() {let mut count = 0;'counting_up: loop {println!("count = {count}");let mut remaining = 10;loop {println!("remaining = {remaining}");if remaining == 9 {break;}if count == 2 {break 'counting_up;}remaining -= 1;}count += 1;}println!("End count = {count}");
}
while条件循环
和其他语言类似
for遍历集合
和其他语言类似
参考:
1.Rust常见编程概念