美文网首页
3.Rust新手教程-函数、控制流、循环

3.Rust新手教程-函数、控制流、循环

作者: 叶小七的真命天子 | 来源:发表于2022-11-24 14:01 被阅读0次

    学习笔记,仅此而已

    一、函数

    Rust函数命名使用关键字fn,类似js的function,变量名使用小写+下划线形式。Rust函数有如下特点

    • 函数声明类似js中的函数声明提升,可以在调用后声明

      fn main1(){
        say_hello();
      }
      
      fn say_hello(){
         println!("hello")
      }
      
    • 当函数有参数时,必须声明参数类型

      fn get_name(user: u32) {
          println!(user)
      }
      
    • 当函数有返回值时,必须声明返回类型,使用 -> 声明返回类型,其中函数返回值以函数最后一行表达式为准,不需要return关键字,可以在条件判断中使用return提前结束

      fn get_name() -> u32 {
        6
      }
      

    函数体的语句和表达式?

    • 函数体有一系列的语句组成,语句是由表达式组成,函数最简单的可以使用一个表达式结束函数体。
      fn get_name()  {
          let x = 20+1;
      }
      
    • Rust是一个基于表达式的语言
    • 表达式会计算产生一个值
    • 函数的定义也是语句
    • 语句没有返回值,所以不能使用let将一个语句赋给变量

    所以针对上述代码

    • let x = 20; 是一个语句
    • 整个函数也是一个语句
    • 20+1是一个表达式,所以可以用let 去接收( 单个20字面量也是表达式)

    错误的例子:

    fn get_name()  {
        let y = (let x = 20) 语句没有返回值,不能用let接收
      }
    

    所以函数的返回值依赖的是最后一行的表达式,而不是语句

    fn get_name() -> u32 {
      6  6是一个表达式,最终最为函数的返回值
    }
    

    值得注意的是,是否是语句还是表达式看你后面是不是带分号了。。。。

    fn get_name() -> u32 {
      6; 带上分号之后,就是一个语句了。。。其返回值就不是6了 而是一个空的tuple对象,编译也会报错,因为声明的返回值类型是u32,现在返回的是tuole对象
    }
    

    惊叹🐂🍺。。。

    二、控制流

    if表达式

    Rust中的if表达式中的条件不需要写小括号(区别于js),但是主体还是得通大括号包裹。

    fn say_hello() {
        let x = 3;
        if x > 3 {
            println!("big")
        }
    }
    

    if后面跟的条件必须返回一个bool值类型,非bool值则报错(区别于js的隐示转换)

    fn say_hello() {
        let x = "bob";
        if x {     编译报错, expected `bool`, found `&str`
            println!("big")
        }
    }
    

    else if处理多个条件

    fn say_hello() {
        let x = 3;
        if x > 3 {
            println!("big")
        } else if x<2 {
            println!("small")
        } else {
            println!("done")
        }
    }
    

    如果超过使用一个elseif,推荐使用match语法,类似于switch语句

    可以在let语句中使用if

    因为if是一个表达式,可以将其放在let语句后面

    fn main() {
        let condition = true;
        let result = if condition { 4 } else { 5 };
        println!("result的值为{}", result)  // result值为4
    }
    

    这里有一个前提是if语句里最终返回的类型要保持一致,不然会报错。

    fn main() {
        let condition = true;
        let result = if condition { 4 } else { 's' };
        println!("result的值为{}", result)  编译会报错
    }
    

    三、循环

    Rust循环有3种:loop、while、for

    loop死循环

    loop是一个死循环

    fn main() {
       loop {
          println!("hello") 死循环输出hello
      }
    }
    

    除非碰到break语句,下面的代码输出 10次之后结束

    fn main() {
        let mut x = 0;
        loop {
            println!("hello");
            x += 1;
            if x == 10 {
                break;
            }
        }
    }
    

    loop语句也可以被let接收,下面的代码最终会输出10

    fn main() {
        let mut x = 0;
        let y = loop {
            x += 1;
            if x == 10 {
                break x;
            }
        };
        println!("{}",y);
    }
    

    while条件循环

    fn main() {
        let mut x = 0;
        while x < 3 {
            x += 1;
            println!("{}", x);
        }
        println!("循环结束了");
    }
    

    上述代码执行输出

    1
    2
    3
    循环结束了
    

    for循环遍历集合

    fn main() {
        let array = [1, 2, 3, 4, 5];
        for item in array.iter() {
            println!("{}", item);
        }
    }
    

    Rust中for循环更安全、简洁,在Rust中用的最多

    相关文章

      网友评论

          本文标题:3.Rust新手教程-函数、控制流、循环

          本文链接:https://www.haomeiwen.com/subject/weszxdtx.html