跳至主要內容

Rust结构化编程

LincZero大约 5 分钟

Rust结构化编程

条件判断

条件判断语句说明
if 语句if 语句用于模拟现实生活中的 如果…就…
if...else 语句if...else 语句用于模拟 如果…就…否则…
else...if 和嵌套if 语句嵌套if 语句用于模拟 如果…就…如果…就…
match 语句match 语句用于模拟现实生活中的 老师点名 或 银行叫

if 语句

if 条件表达式 {
    // 条件表达式为true时要执行的逻辑
}

示例

let total:f32 = 666.00;
if total > 500.00 {
   println!("打8折,{}",total*0.8)
}
// 输出 打8折,532.8

if …else 语句

if 条件表达式 {
   // 如果 条件表达式 为真则执行这里的代码
} else {
   // 如果 条件表达式 为假则执行这里的代码
}

示例

let total:f32 = 166.00;
if total > 500.00 {
   println!("打8折,{}", total*0.8)
} else {
   println!("无折扣优惠,{}", total)
}
输出 无折扣优惠,166

if…else if… else 语句

if 条件表达式1 {
   // 当 条件表达式1 为 true 时要执行的语句
} else if 条件表达式2 {
   // 当 条件表达式2 为 true 时要执行的语句
} else {
   // 如果 条件表达式1 和 条件表达式2 都为 false 时要执行的语句
}

示例

let total:f32 = 366.00;
if total > 200.00 && total < 500.00 {
    println!("打9折,{}",total*0.9)
} else if total > 500.00 {
    println!("打8折,{}",total*0.9)
} else {
    println!("无折扣优惠,{}",total)
}
// 输出 打9折,329.4

match 语句

Rust 中的 match 语句有返回值,它把 匹配值 后执行的最后一条语句的结果当作返回值。

语法

match variable_expression {
   constant_expr1 => {
      // 语句;
   },
   constant_expr2 => {
      // 语句;
   },
   _ => {
      // 默认
      // 其它语句
   }
};

示例

let code = "10010";
let choose = match code {
   "10010" => "联通",
   "10086" => "移动",
   _ => "Unknown"
};
println!("选择 {}", choose);  // 输出 选择 联通

let code = "80010";
let choose = match code {
   "10010" => "联通",
   "10086" => "移动",
   _ => "Unknown"
};
println!("选择 {}", choose);  // 输出 选择 Unknown

循环

现实中的循环很多,比如我们在学校操场里跑步,一圈一圈的跑。在计算机中,循环 其实就是一种重复,在满足指定的条件下,重复的做某些事情。

Rust 语言中也有三种表示 循环 的语句:

  • loop 语句。一种重复执行且永远不会结束的循环。
  • while 语句。一种在某些条件为真的情况下就会永远执行下去的循环。
  • for in 语句。一种有确定次数的循环。

for in 循环

for 临时变量 in 左区间..右区间 {
   // 执行业务逻辑
}

左区间..右区间,这是一个左闭右开的区间,1..5,那就只包含 1,2,3,4

for num in 1..5 {
   println!("num is {}", num);
}

// 输出
num is 1
num is 2
num is 3
num is 4

可以使用 a..=b 表示两端都包含在内的范围。

for num in 1..=5 {
   println!("num is {}", num);
}

// 输出
num is 1
num is 2
num is 3
num is 4
num is 5

for in 与迭代器

iter (集合不变)

在每次迭代中借用集合中的一个元素。这样集合本身不会被改变,循环之后仍可以使用。

let studyList = vec![
     "《Go语言极简一本通》",
     "Go语言微服务架构核心22讲",
     "从0到Go语言微服务架构师",
];
for name in studyList.iter() {
    match name {
        &"从0到Go语言微服务架构师" => println!("恭喜你进阶到第三阶段-{}!", name),
        _ => println!("学习: {}", name),
    }
}

// 输出
学习:Go语言极简一本通》
学习: Go语言微服务架构核心22讲
恭喜你进阶到第三阶段-0Go语言微服务架构师!

into_iter (消耗集合)

会消耗集合。在每次迭代中,集合中的数据本身会被提供。一旦集合被消耗了,之后就无法再使用了,因为它已经在循环中被 “移除”(move)了。

let studyList2 = vec![
    "《Go语言极简一本通》",
    "Go语言微服务架构核心22讲",
    "从0到Go语言微服务架构师",
];
for name in studyList2.into_iter() {
    match name {
        "从0到Go语言微服务架构师" => println!("恭喜你进阶到第三阶段-{}!", name),
        _ => println!("学习: {}", name),
    }
}

// 输出
学习:Go语言极简一本通》
学习: Go语言微服务架构核心22讲
恭喜你进阶到第三阶段-0Go语言微服务架构师!

iter_mut (集合可改)

可变地(mutably)借用集合中的每个元素,从而允许集合被就地修改。 就是停止本次执行剩下的语句,直接进入下一个循环。

let mut studyList3 = vec![
    "《Go语言极简一本通》",
    "Go语言微服务架构核心22讲",
    "从0到Go语言微服务架构师",
];
for name in studyList3.iter_mut() {
    *name = match name {
        &mut "从0到Go语言微服务架构师" => {
            "恭喜你进阶到第三阶段---从0到Go语言微服务架构师"
        }
        _ => *name,
    }
}
println!("studyList3: {:?}", studyList3);

// 输出
studyList3: ["《Go语言极简一本通》", "Go语言微服务架构核心22讲", "恭喜你进阶到第三阶段---从0到Go语言微服务架构师"]

while 循环

while ( 条件表达式 ) {
    // 执行业务逻辑
}

上面的条件表达式为真,就会执行 while 循环。

let mut num = 1;
while num < 20 {
    println!("num is {}",num);
    num= num*2;
}

// 输出
num is 1
num is 2
num is 4
num is 8
num is 16

loop 循环+break

loop {
    // 执行业务逻辑
}
break; 中断的意思,就是跳出loop循环

示例

let mut num = 1;
loop {
   if num > 20{
      break;
   }
   println!("num is {}",num);
   num = num*3;
}

// 输出
num is 1
num is 3
num is 9