1 变量和可变性
1.1 变量
- 用let定义变量,通常使用自动类型推导,也可以变量名后加冒号和类型来指定类型
- 默认是不可变的,可以用mut指定是可变的
- 对不可变变量重新赋值会出现编译错误
可重复使用let定义同名变量,这就是 变量遮盖(shadow) ,遮盖时可修改变量类型
1.2 常量
使用const定义常量
常量名称通常由大写字母和下划线组成,若不遵照此规范,编译时会出警告
2 数据类型
2.1 标量
整数类型
- 整数类型字面量:默认为i32类型
- 浮点数
- 有f32和f64两种类型
- 字面量默认为f64类型
- 数学运算符:加(+)、减(-)、乘(*)、除(/)、求余(%)
- 布尔型bool的值有true和false
-
2.2 复合类型
2.2.1 元组
fn tuple_demo(){
// 元组的各个元素可以是不同类型,元组解构,用.index引用元组元素
let tup = (3,4.0,"5");
let (x,y,z) = tup;
println!("x={} y={} z={}",x,y,z);
println!("x={} y={} z={}",tup.0,tup.1,tup.2);
}
2.2.2 数组
fn array_demo(){
let array = [1,2,3,4,5];
let first = array[0];
println!("first={}",first);
}
3 函数如何工作
表达式与语句:通常语句以分号结束,而表达式末尾不能加分号,加了就是语句了。
函数体中最后一个表达式的值就是函数的返回值,个人建议还是明确地用return来返回值比较好。
4 控制流
4.1 if语句
if … else
- let if .. else .. 注意:if和else分值的值类型必须相同```rust
let condition = true;
let number = if condition {
} else {5
}; ```6
4.2 循环
- loop 无限循环
- while 循环
for 循环```rust let a = [10, 20, 30, 40, 50];
for element in a.iter() {
println!("the value is: {}", element);
}
```rust
for number in (1..4).rev() {
println!("{}!", number);
}
5 源代码```rust
fn main() {
// 常量应该命名为大写字母串(不是大写字母串时会警告)
const A:u32 = 0;
// 变量遮盖(shadow)不同于变量赋值.变量默认是不可变(immutable)的
// 1 只有明确地用mut才能指示是可变的(mutable)
// 2 使用let表示变量遮盖,创建了同名变量;不使用let则是赋值,这对于不可变变量是非法的
// 3 变量遮盖时实际创建了新的变量,所以可以改变类型
let x = 5;
let x:i64 = x + 6;
let spaces = " ";
let spaces = spaces.len();
// 这是错误的: 没有let则是变量赋值,而不是遮盖
// 赋值时不可改变类型;遮盖时可改变类型
//spaces = spaces.len();
println!("A={} x={} spaces={}",A,x,spaces);
array_demo();
tuple_demo();
for_demo();
println!("3 + 4 = {}",add_two(3,4));
println!("month_days(2017,6)={}",month_days(2017,6));
}
fn array_demo(){ let array = [1,2,3,4,5]; let first = array[0]; println!(“first={}”,first); }
fn tuple_demo(){ // 元组的各个元素可以是不同类型,元组解构,用.index引用元组元素 let tup = (3,4.0,”5”); let (x,y,z) = tup; println!(“x={} y={} z={}”,x,y,z); println!(“x={} y={} z={}”,tup.0,tup.1,tup.2); }
fn add_two(a:i32,b:i32)->i32{ // 注意: 末尾不能有分号. // 有分号是语句;没有分号是表达式;函数末尾应该是一个表达式,而不是语句. a+b }
fn month_days(year:i32,month:i32)->i32{ // if表达式 let days = if month == 2{ if (year % 4 == 0 && year % 100 != 0) || year % 400 == 0{ 29 }else{ 28 } }else{ let array: [i32;13] = [0,31,28,31,30,31,30,31,31,30,31,30,31]; array[month as usize] }; return days; }
fn for_demo(){ // for 循环 let a = [10, 20, 30, 40, 50]; for element in a.iter() { println!(“the value is: {}”, element); }
for number in (1..4).rev() {
println!("{}!", number);
}
} ```