Rust 基础语法(二) -- 函数与控制流

2022-05-21 20:41:37   最后更新: 2022-06-14 16:38:30   访问数量:194




 

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

 

Rust 基础语法(一) -- 变量、运算与注释

 

 

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

 

 

2.1 函数定义

 

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

 

fn <函数名> ( <参数> ) { <函数体> }

 

 

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

 

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

 

 

2.2 函数参数

 

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

 

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

 

 

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

 

2.3 函数体

 

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

 

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 中,函数定义可以嵌套:

 

fn main() { fn five() -> i32 { 5 } println!("five() 的值为: {}", five()); }

 

 

2.5 函数返回值

 

fn add(a: i32, b: i32) -> i32 { return a + b; }

 

 

 

3.1 条件语句的用法

 

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

 

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); }

 

 

总结起来就是这样:

 

if <condition> { block 1 } else { block 2 }

 

 

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

 

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

 

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

 

fn main() { let a = 3; let number = if a > 0 { 1 } else { -1 }; println!("number 为 {}", number); }

 

 

 

Rust 语法中的循环有三种:

 

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

 

4.1 while 循环

 

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 循环:

 

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

 

 

4.3 loop 循环

 

loop 循环就是无限循环:

 

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 这样的循环常被用来当作查找工具使用,如果找到了某个东西当然要将这个结果交出去:

 

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

 

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

 

Rust 专题






循环      函数      rust     


京ICP备2021035038号