函数和控制流

专栏简介:本专栏作为Rust语言的入门级的文章,目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言,虽然历史没有C++、和python历史悠远,但是它的优点可以说是非常的多,既继承了C++运行速度,还拥有了Java的内存管理,就我个人来说,还有一个优点就是集成化的编译工具cargo,语句风格和C++极其相似,所以说我本人还是比较喜欢这个语言,特此建立这个专栏,作为学习的记录分享。

日常分享:每天努力一点,不为别的,只是为了日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!


目录

函数

参数

控制流

if表达式

循环语句

loop循环语句

循环标签

while循环

for 遍历循环

总结


函数

函数的声明在多个编程语言中均有被提到,函数这个功能应该算是一门编程语言中举足轻重的功能。使用函数可以使功能更加规格化,更加具有逻辑条例。增加代码的可读性。

和C++不同的是,Rust语言所有的函数声明均是使用关键字fn来实现。和Python中的def关键字一样,这样为我们省去了很多的麻烦。

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

上面的例子就是创建了一个无参的函数,如果我们要创建含参的函数又该如何?

参数

我们可以定义为拥有 参数parameters)的函数,参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)。技术上讲,这些具体值被称为参数(arguments),但是在日常交流中,人们倾向于不区分使用 parameterargument 来表示函数定义中的变量或调用函数时传入的具体值。

fn main() {
  And(3,4);
}
fn And(x:i32, y:i32) ->i32
{
  let num:i32=(x+y);
  println!("x+y: {}",num);
  return num;
}

 上面的例子中的一个函数的作用是将两个数加起来,函数中定义了两个参数,参数类型都是i32的,在定义行参的时候,一定要注明参数类型,同时,细心的小伙伴应该会发现,函数的后面存在一个箭头符号,并且指向了i32数据类型,这是代表函数的返回值是i32类型的,也就是函数是否有返回值的标志。

控制流

控制流,顾名思义就是控制程序语句执行情况的的语句,包括条件语句,循环语句等语句,这里就介绍一些常用的控制语句。

if表达式

if 表达式允许根据条件执行不同的代码分支。你提供一个条件并表示 “如果条件满足,运行这段代码;如果条件不满足,不运行这段代码。”

与if语句相匹配的是else或者else if。其实通过中文意思就可以知道他们的作用,无非就是判断是否满足条件,然后根据判断情况来执行代码。

fn main() {
   let num= And(5,6);
   println!("num: {:?}", num);
}
fn And(x:i32, y:i32) ->i32
{
  let mut number;
  if(x>y)
  {
    println!("x bigger than y");
    number=x-y;
  }
  else if (x==y)
  {
    println!("x equals y");
    number=x;
  }
  else{
    println!("x smaller than y");
    number=y+x;
  }
  return number;
}

 上面给出的例子中,使用了if,else if,else语句,除此之外,每个判断语句都没有使用括号括起来。一定要注意这点,和C++有点区别。在Rust中,if语句还是有很多缺陷,比如说,他不能自动把非布尔值转换成布尔值,也就是判断条件只能是布尔值。而且if,else语句太过臃肿,代码结构不够美观,为了解决这种缺点,Rust中还有一种很好的分支判断结构叫做——模式匹配(match)。后面会介绍,这里就简单的了解一点。

循环语句

循环语句就是指将一段代码重复使用的一种方式,使用的很多,所以这里我们必须要详细的介绍一下。

loop循环语句

loop循环语句有点像MySQL中的用法有点相似,loop循环语句也叫无限循环语句,只有当你确定跳出循环的时候,才能跳出。

fn loops(mut i:i32, mut j:i32)->i32
{
  loop
  {
    if i==j
    {
      break i;
    }
    else if i<j
    {
      //i+=1;
      i=i+1;
      j=j-1;
    }
    else{
      i=i-1;
      j=j+1;
    }
  }
}

 loop语句中,使用了break i;这种语句格式,这个和c++中的语句不同,他可以终止循环语句,同时返回后面的表达式的值。谈到返回值,在一个函数中,函数的返回值类型必须一样。除了break可以跳出循环外,还有一种语句——continue。可以结束此次迭代,进入下次迭代。

循环标签

如果存在嵌套循环,breakcontinue 应用于此时最内层的循环。你可以选择在一个循环上指定一个 循环标签loop label),然后将标签与 breakcontinue 一起使用,使这些关键字应用于已标记的循环而不是最内层的循环。

fn main() {
    let mut count = 0;
    'counting_up: loop {
        println!("count = {count}");
        let mut remaining = 10;

        loop {
            println!("remaining = {remaining}");
            if remaining == 9 {
                break;
            }
            if count == 2 {
                break 'counting_up;
            }
            remaining -= 1;
        }

        count += 1;
    }
    println!("End count = {count}");
}

 这里的标签可以理解为其实就是一种值为“counting_up”的变量,然后绑定到loop上,只要loop的返回值为变量的值,则这个表达式正确,开始执行。

while循环

while循环语句和其他语言中的一样,当判断条件为true时,执行循环,否则结束循环;

fn main()
{
  While();

}
fn While()
{
  let mut i=0;
  while i!=100
  {
    println!("{}",i);
    i+=1;

  }
}

 这种结构消除了很多使用 loopifelsebreak 时所必须的嵌套,这样更加清晰。当条件为 true 就执行,否则退出循环。个人比较推荐使用这种。

for 遍历循环

for循环作为最常见的循环,在c++,java等语言中均有使用,不过Rust语言中的书写格式和Python中的书写格式很相似。

fn main()
{
  let a:[i32;5]=[1,2,3,4,5];
  for i in a{
    println!("{}",i);
  }

}

Rust还提供了一种简单的数据便利:

fn main()
{
  let a:[i32;5]=[1,2,3,4,5];
  for i in (0..5){
    println!("{}",a[i]);
  }

}

这里使用的是一种类似于Python中的range的容器,可以很快的书写,同时也提供了 反转函数rev。

fn main() {
    for number in (1..4).rev() {
        println!("{number}!");
    }
    println!("LIFTOFF!!!");
}

总结

最后,再介绍一下函数的注释,Rust的注释分为单行注释(//)和多行注释(/*  */)。这个语法和c++几乎一样。所以就没在主文中介绍了。对于本篇文章,主要是介绍了Rust中的一些简单的关键字以及用法,下一节进入“所有权”的学习。拜拜了你勒!!!

猜你喜欢

转载自blog.csdn.net/qq_59931372/article/details/131692453
今日推荐