第三章Common Programming Concepts
Variables and Mutability
variables
变量 默认immutable 不能更改值 要改为mutable才能更改
let y = 5
y = 7 //会产生编译报错
//正确的方法
let mut y = 6
y = 7
because it makes the code more convenient to write than if it had only immutable variables.
Constants
一直保持 immutable的状态
并且定义的时候要声明变量类型
Shadowing
可以对同一个变量多次赋值,要用上let关键字,后面的值会替代前面的值。
fn main() {
let x = 5;
let x = x + 1; \\x = 6
let x = x * 2; \\ x = 12
println!("The value of x is: {}", x);
}
- 与直接用mut不同,多次let后最终值仍然是immutable状态。
- shadowing可以使得变量用相同名称,但用不同的类型
Data Types
编译时必须有类型
Scalar 标量类型
int、float、bool、char 四种类型
int的默认类型是i32
int溢出说明
编译过程中:
debug模式,Rust会协助检查
release模式,Rust 会二进制补码
float默认是f64
bool 占1 bit
char 用单引号’ ’ (而String用双引号 " " ) 占4bit
Compound 复合类型
tuple 元组
元组 是一系列不同数据类型的组合
一旦确定,大小不能改变
let tup: (i32, f64, u8) = (500, 6.4, 1);
let (x, y, z) = tup; //解构
let (x, y, z) = tup 分别给x,y,z 赋值,这个过程被称为解构
也可以使用
let x = tup.0;
这种方式
数组
同样是固定长度
较特殊的一种表示
let a = [3; 5];
最终形成5个3组成的数组
Functions
采用用蛇形命名法:全部小写单词,中间连字符连接
参数定义必须有类型
statement(语句)和expression(表达式)区别
__ | __ |
---|---|
语句 | 执行操作,没有返回值 |
表达式 | 产生结果 |
Rust is an expression-based language
因此,函数返回值需要按照表达式返回
如
fn plus(x: i32,y:i32)-> i32{
x+y //或 return x+y 或 return x+y ;
}
x = y = 6
这样的表达式不能再Rust里出现,let x = (let y = 6)
就会报错,因为let y = 6 是语句,并不会返回某种值。
Control Flow
if
- if的条件必须是 bool类型变量,Rust没有变量转化机制
- if是表达式,因此可以用于赋值,但if,else的返回值类型要相同,如
let number = if condition { 5 } else { 6 };
// let number = if condition { 5 } else { "SIX" }; 是错误的
loop
与 if类似,loop结果也可用于 let 赋值
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
for
Rust采用以下风格
for i in 1..10{
println!("{}",i);
}
let x = [0, 1, 2, 3, 100];
for element in x.iter() { // or use &x
println!("element: {}", element);
}
练习2
use std::io;
fn F(n :u32)->u32{
if n == 1 || n == 2 {
return 1;
}else{
F(n-1)+F(n-2)
}
}
fn main() {
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("error");
let n :u32 = input.trim().parse().expect("error");
let mut n = 8;
while n!=0 {
let re = F(n);
println!("{}",re);
n -= 1;
}
}
另外一道题还挺有意思,不过之前没有听说过
print the lyrics to the Christmas carol “The Twelve Days of Christmas,” taking advantage of the repetition in the song.
网上大多是Java 实现的,我用Rust改写一下,单独列一篇。