阿sir今天开始学习Rust了,至于为什么学习呢? 以后再说
我们都知道,程序设计 = 数据结构 + 算法。
因此,我们依次学习Rust中数据结构的定义&算法的实现,然后用它们实现一个简单的“hello world”
数据结构
Rust提供了两类数据类型:基础数据类型和结构体,阿sir将依次学习
基础数据类型
整数型:整型,按照比特位长度和有无符号分为以下种类:
位长度 | 有符号 | 无符号 |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
浮点型:Rust支持 32 位浮点数(f32)和 64 位浮点数(f64)
布尔型:用 bool 表示,值只能为 true 或 false
字符型:字符型用 char 表示。类型大小为 4 个字节,代表 Unicode标量值
复合类型:Rust有两类复合类型:元组、数组。
元组用一对 ( ) 包括的一组数据,可以包含不同种类的数据。举个🌰
let tup: (i32, f64, u8) = (1, 2.1, 3); //定义元组
// tup.0 等于 1
// tup.1 等于 2.1
// tup.2 等于 3
let (x, y, z) = tup; //将tup的值赋给x、y、z
// y 等于 2.1
数组用一对 [ ] 包括的同类型数据。
let a = [1, 2, 3, 4, 5];
结构体
基础语法比较简单,使用struct定义好一个结构体之后就可以直接使用了
//基础语法1:简单定义
struct 名称{
字段名1:类型,
字段名2:类型 //注意最后一个字段不添加,
}
//基础语法2:结构体+元组
struct 名称(类型, 类型, 类型);
struct People {
sex: char,
age: u16
}
let people = People {
sex: 'm',
age: 23
};
struct ColorRGB(u16,u16,u16); //定义rgb
let black = ColorRGB(0, 0, 0);
我们知道在面向对象的语言中,类除了变量外,还有方法,Rust同样支持定义结构体方法
impl People {
fn is_older(&self, other: People) -> bool {
return self.age > other.age;
}
}
let jordy = People {
sex: 'm',
age: 23
};
let john = People {
sex: 'm',
age: 24
};
jordy.is_older(john)
ok,到目前阿sir学会了Rust的数据结构,下面开始学习算法
算法
所谓算法,都是由基础的代码分支构成:条件判断、循环
条件判断
// 基本语法
if condition1{
// do something
}else{
// do something
}
if condition1{
// do something
}else if condition2{
// do something
}else{
}
// 举个🌰
let people = People {
sex: 'm',
age: 23
};
if people.age >= 18{
println!("he/she is an audit");
}else if people.age <= 12{
println!("he/she is an child");
}else{
println!("he/she is a teenager");
}
循环
// 基础语法1
while condition{
if condition1{ //满足条件,则跳出循环
break;
}
if condition2{ //满足条件,则跳过本次循环,进入下一次循环
continue
}
//do something
}
// 基础语法2:rust支持用for来循环处理数组
for i in arrays {
println!("值为 : {}", i);
}
//基础语法3:rust还对无限循环的场景做了特别支持,采用loop关键字即可实现无限循环功能
loop{
//do something
}
需要注意的是Rust并不支持switch/case结构
OK,现在阿sir学习了基本语法,只是输出一个“HelloWorld”太简单了,不如尝试一个算法届的“HelloWord”——斐波那契(Leetcode),大家可以自己写一下。
代码如下:
impl Solution {
pub fn fib(n: i32) -> i32 {
let mut pre = 0;
let mut now = 1;
let mut next = 1;
let mut count = 2;
if n == 0 {
return pre;
}
if n == 1{
return now;
}
if n == 2{
return next;
}
while count <= n {
next = now + pre;
pre = now;
now = next;
count = count + 1;
}
return now;
}
}