前端搞Rust 第三集 函数与控制流

234 阅读2分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

函数

根据咱们以前的rust 例子

fn main() {
    println!("Hello, world!");
}
  • 声明函数使用fn 关键字
  • Rust 使用的是 snake code 命名规范(蛇皮命名法)
    • 单词小写使用_分割
    fn main() {
          println!("Hello, world!");
          other_fn(); //调用
      }
      //定义一个函数,函数声明不分前后
    fn other_fn(){
          println!("other_fn!");
      }
    
    

函数的参数

  • parametes(形参),arguments(实参)
  • 在声明函数的时候,必须声明每个参数的类型
fn main() {
    other_fn(1,2);
}
fn other_fn(x:i32,y:i32){
    println!("x=>{},y=>{}",x,y);
}

image.png

函数的返回值

  • 在 -> 符号后面声明函数返回值类型,但是不能返回值得命名
  • 在Rust 中,返回值是函数体最后一个表达式,可以省略return (比较常见)
  • 要是想提前返回,需要使用return 关键字,并指定一个值
fn main() {
    let a = 10;
    println!("add_one=>{}", add_one(a));
    println!("add_five=>{}", add_five(a))
}
fn add_one(x: i32) -> i32 {
    x + 1
}
fn add_five(x: i32) -> i32 {
    x + 5
}

运行结果 image.png

控制流

总体来说比较简单

if 表达式

  • 根据条件执行不同代码
    • 这个条件必须是bool类型
  • 与条件关联的代码叫做分支
fn main() {
    let num = 10;
    if num < 10 {
        println!("小于10")
    } else if num > 10 {
        println!("大于10")
    } else {
        println!("等于10")
    }
}

运行结果 image.png

使用else if 处理多重事件

上面的代码例子 只使用了一个else if 要判断条件很多,最好使用match

fn main() {
    let number = 13;
    println!("Tell me about {}", number);
    match number {
        1 => println!("One!"),
        2 | 3 | 5 | 7 | 11 => println!("This is a prime"),
        13..=19 => println!("A teen"),
        _ => println!("Ain't special"),
    }
}

image.png

在let 语句中使用if

fn main() {
    let flag = true;
    let num = if flag {5} else{7};
    println!("num=>{}",num)
}

image.png

循环

rust 提供了三种循环方式 loop;while;for

loop 循环

反复执行一块代码,直到stop,需要手动break

fn main() {
    let mut counter = 0;
    let result:i32= loop {
       counter+=1;
       if counter ==10 {
           break counter;
       }
    };
    println!("result=>{}",result)
}

image.png

while 条件循环

每次执行之前都判断一次条件

fn main() {
    let mut count  =3;
    while count !=0 {
        println!("{}!",count);
        count = count - 1;
    }
    println!("结束")
}

image.png

for 循环遍历

  • 可以针对集合中的每个元素来执行一些代码
fn main() {
    let a =[10,20,30,40,50];
    for item in a.iter(){
        println!("value => {}",item)
    }
}

image.png

Range

  • 指定开始数字和技术数字,Range 可以生成他们之间的数字 (包头不包尾)
  • rev 可以翻转 Range
fn main() {
    for elem in (1..4).rev() {
        println!("{}",elem)
    }
}

image.png