一、变量的定义和使用
其它常见的编程语言对变量的定义通常是通过声明类型和使用关键new来创建一个变量,但Rust不是,Rust使用关键字let。
1. 变量绑定通过let实现
fn main() {
let x = 5;
}
2. 变量可以是一种模式,自动匹配。
let (x, y) = (1, 2);
3. 支持声明类型
let x: i32 = 5;
4. 变量绑定要求在可以使用它之前必须初始 化。
let x: i32; //错误,如果没有使用到这个变量,编译的时候是个警告,如果在某个地方使用到就是错误了。
let x: i32 = 10; //正确,初始化是一个好的习惯
5. 默认变量的值不可改变,如果要改变则使用关键字mut
let mut x = 5; // mut x: i32
x = 10;
6. let开始的是一个语句,而不是表达式
let mut y = 5;
let x = (y = 6); // x has the value `()`, not `6`
二、函数
1.函数即方法,使用关键字fn声明
fn main() {
}
2. 你必须为函数参数声明类型
fn print_number(x: i32) {
println!("x is: {}", x);
}
fn format(name: &str){
println!("match? {}", name);
}
3. 函数返回值及其类型
fn add_one(x: i32) -> i32 {
x + 1
}
注意里面行尾没有分号;如果加上反而报错
4. 使用关键字return的函数
fn foo(x: i32) -> i32 {
return x + 1;
}
这个最常见的返回值方式居然在Rust里不被鼓励,怎么回事
5. 发散函数
fn diverges() -> ! {
panic!("This function never returns!");
}
以它拥有一个类型 ! ,它代表“发散”。一个发散函数可以是任 何类型:
let x: i32 = diverges();
let x: String = diverges();
三、条件语句
条件控制语句中的条件是不需要用小括号()包裹起来
例如 :
if universe::recalibrate() {
return;
}
let x = 5;
if x == 5 {
println!("x is five!");
} else if x == 6 {
println!("x is six!");
} else {
println!("x is not five or six :(");
}
while count < 10 {
println!("count is {}", count);
count += 1;
}
四、循环与迭代
1. loop
let mut x = 10;
loop {
x += 1;
println!("{}", x);
}
2. while
let mut x = 5; // mut x: u32
let mut done = false; // mut done: bool
while !done {
x += x - 3;
println!("{}", x);
if x % 5 == 0 {
done = true;
}
}
4. for
C系的for循环:
for (x = 0; x < 10; x++) {
printf( "%d\n", x );
}
Rust的for循环:
使用下面这样的迭代表达式
for var in expression {
code
}
for x in 0..10 {
println!("{}", x); // x: i32
}
记录循环次数
for (i,j) in (5..10).enumerate() {
println!("i = {} and j = {}", i, j);
}
结果:
i = 0 and j = 5
i = 1 and j = 6
i = 2 and j = 7
i = 3 and j = 8
i = 4 and j = 9
即符合如下表达式:
for (linenumber, line) in lines.enumerate() {
println!("{}: {}", linenumber, line);
}
5. 改变循环状态的关键字
即break 和 continue
例如:
let mut x = 5;
loop {
x += x - 3;
println!("{}", x);
if x % 5 == 0 { break; }
}
其实就基础语法方面的认识,大多数语言都是通用的,可能会稍微增加一下各自语言的特性。