一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
主要是面对有一定编程基础的读者,相信也没有人会直接用 rust 作为第一种语言学习编程。
通过例子快速掌握 rust 的特点
数据类型
标量类型
整形
就是java的int 但是分类更多
| 长度 | 有符号 | 无符号 |
|---|---|---|
| 8-bit | i8 | u8 |
| 16-bit | i16 | u16 |
| 32-bit | i32 | u32 |
| 64-bit | i64 | u64 |
| 128-bit | i128 | u128 |
| arch | isize | usize |
有符号就是 -(2n - 1) 到 2n - 1 - 1 无符号是 从 0 到 2n - 1
rust 默认整数是i32
isize 或 usize 主要作为某些集合的索引。
需要注意 整型溢出 编译环境溢出会包panic,正式包会溢出使用wrapping处理溢出
- 所有模式下都可以使用
wrapping_*方法进行包装,如wrapping_add - 如果
check_*方法出现溢出,则返回None值 - 用
overflowing_*方法返回值和一个布尔值,表示是否出现溢出 - 用
saturating_*方法在值的最小值或最大值处进行饱和处理
浮点型
浮点类型只有f32,f64 都是带符号的,默认为f64
布尔
bool 就是true ,false 更java一样
符号类型
fn main() {
let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '😻';
}
单引号声明,代表unicode 标量值
复合类型
元组
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
let (x, y, z) = tup;
println!("The value of y is: {}", y);
}
数组类型
fn main() {
//下面两种方式相同
let a = [3, 3, 3, 3, 3];
let a = [3; 5];
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
}
定义变量和常量
let 定义变量,默认是不可变变量,let不返回值不能再次赋值
let 默认是可以推断类型的,但是结果不能推断的时候需要制定类型
let guess: u32 = "42".parse().expect("Not a number!");
mut 可变变量
const 常量
fn main(){
let x = 5;
println!("The value of x is: {}", x);
x = 6;//会编译失败
println!("The value of x is: {}", x);
}
fn main() {
let mut x = 5;
println!("The value of x is: {}", x);
x = 6;
println!("The value of x is: {}", x);
}
let 定义的变量是不可以改变的,如果需要改变要设置 mut 变量才能真正的改变
shadowing 隐藏其实就是新建一个变量只不过和java不同的是允许变量名跟之前的相同
fn main() {
let x = 5;
let x = x + 1;
{
let x = x * 2;
println!("The value of x in the inner scope is: {}", x);
}
println!("The value of x is: {}", x);
}
The value of x in the inner scope is: 12
The value of x is: 6
定义方法
方法可以直接返回值,x+1没有写;这样可以直接放回
fn main() {
let x = plus_one(5);
println!("The value of x is: {}", x);
}
fn plus_one(x: i32) -> i32 {
x + 1
}
流程控制
if
- if 不会讲其他类型值转成bool判断,所以条件必须是bool型
- 条件不需要小括号
- if 是表达式拥有返回值所以可以复制给let
- 返回值需要统一类型
fn main() {
let condition = true;
let number = if condition { 5 } else { "six" }; println!("The value of number is: {}", number);
}
循环
- 支持 while,for
- 增加loop 无限循环
- break,continue 默认结束当前层循环,
- break 可以带返回值,可以赋值
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("The result is {}", result); }