Rust 基础语法(二) -- 函数与循环

2022-06-27 17:07:07 浏览数 (1)

上一篇文章中,我们介绍了 Rust 最基础的变量、运算、数据类型、注释等内容。

本文,我们就来进一步讲解函数、条件、循环等基础语法。

2. 函数

2.1 函数定义

此前的文章中我们已经介绍过 Rust 的函数:

代码语言:javascript复制
fn <函数名> ( <参数> ) { <函数体> }

Rust 的函数名命名规范是下划线式:

代码语言:javascript复制
fn main() {
    println!("Hello, world!");
    another_function();
}

fn another_function() {
    println!("Hello, runoob!");
}

2.2 函数参数

Rust 中定义函数如果需要具备参数必须声明参数名称和类型:

代码语言:javascript复制
fn main() {
    another_function(5, 6);
}

fn another_function(x: i32, y: i32) {
    println!("x 的值为 : {}", x);
    println!("y 的值为 : {}", y);
}

函数参数的传入类型与声明类型必须严格匹配。

2.3 函数体

Rust 中可以在一个用 {} 包括的块里编写一个较为复杂的表达式,从而构成一个函数体:

代码语言:javascript复制
fn main() {
    let x = 5;

    let y = {
        let x = 3;
        x   1
    };

    println!("x 的值为 : {}", x);
    println!("y 的值为 : {}", y);
}

打印出了:

x 的值为 : 5 y 的值为 : 4

  • 需要注意的是函数体中的 x 1 末尾是没有分号的,否则它将变成一条语句。

2.4 函数嵌套

在 Rust 中,函数定义可以嵌套:

代码语言:javascript复制
fn main() {
    fn five() -> i32 {
        5
    }
    println!("five() 的值为: {}", five());
}

2.5 函数返回值

代码语言:javascript复制
fn add(a: i32, b: i32) -> i32 {
    return a   b;
}

3. 条件语句

3.1 条件语句的用法

和许多其他语言类似,Rust 的条件语句并不难理解:

代码语言:javascript复制
fn main() {
    let a = 12;
    let b;
    if a > 0 {
        b = 1;
    }  
    else if a < 0 {
        b = -1;
    }  
    else {
        b = 0;
    }
    println!("b is {}", b);
}

总结起来就是这样:

代码语言:javascript复制
if <condition> { block 1 } else { block 2 }

condition 必须是 bool 类型,也可以加括号括起来,但一般来说并不需要。

3.2 条件语句与函数体表达式结合

条件语句的语法中的 { block 1 } 和 { block 2 } 也可以用函数表达式:

代码语言:javascript复制
fn main() {
    let a = 3;
    let number = if a > 0 { 1 } else { -1 };
    println!("number 为 {}", number);
}

4. 循环

Rust 语法中的循环有三种:

  1. while 循环
  2. for 循环
  3. loop 循环

4.1 while 循环

代码语言:javascript复制
fn main() {
    let mut number = 1;
    while number != 4 {
        println!("{}", number);
        number  = 1;
    }
    println!("EXIT");
}

打印出了:

1 2 3 EXIT

4.2 for 循环

rust 没有 C 语言中那种三元操作的 for 循环,rust 的 for 循环用于迭代一个元组或数组,类似于 php 中的 foreach 循环:

代码语言:javascript复制
fn main() {
    let a = [10, 20, 30, 40, 50];
    for i in a.iter() {
        println!("值为 : {}", i);
    }
}

4.3 loop 循环

loop 循环就是无限循环:

代码语言:javascript复制
fn main() {
    let s = ['R', 'U', 'N', 'O', 'O', 'B'];
    let mut i = 0;
    loop {
        let ch = s[i];
        if ch == 'O' {
            break;
        }
        println!("'{}'", ch);
        i  = 1;
    }
}

4.4 loop 循环与函数体表达式

loop 循环可以通过 break 关键字类似于 return 一样使整个循环退出并给予外部一个返回值。这是一个十分巧妙的设计,因为 loop 这样的循环常被用来当作查找工具使用,如果找到了某个东西当然要将这个结果交出去:

代码语言:javascript复制
fn main() {
    let s = ['R', 'U', 'N', 'O', 'O', 'B'];
    let mut i = 0;
    let location = loop {
        let ch = s[i];
        if ch == 'O' {
            break i;
        }
        i  = 1;
    };
    println!(" 'O' 的索引为 {}", location);
}

打印出了:

'0' 的索引为 3

0 人点赞