函数和控制流

news2024/11/24 6:03:06

专栏简介:本专栏作为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中的一些简单的关键字以及用法,下一节进入“所有权”的学习。拜拜了你勒!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot的宠物店管理系统(源代码+数据库)087

基于Springboot的宠物店管理系统(源代码数据库)087 一、系统介绍 本系统分为管理员、店员两种角色 店员角色包含以下功能&#xff1a; 登录、宠物主人管理、宠物管理、宠物医疗管理、宠物销售管理、宠物寄养管理、宠物用品管理、宠物日常服务管理、宠物常见问题、个人中心、…

基于JavaSwing+MySQL的仓库商品管理系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88046204?spm1001.2014.3001.5503 JDK1.8 MySQL5.7 功能&#xff1a;管理员与员工两个角色登录&#xff0c;增删改查用户信息&#xff0c;修改密码&#xff0c;增删改查商品信息&#xff0c…

Java文件与IO

文章目录 前言认识文件绝对路径与相对路径普通文件与二进制文件 Java中的操作文件File 类文件的读写 前言认识文件 狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备&#xff0c;当我们想要进行数据保存时&#xff0c;往往不是保存成一个整体&#xff0c;而是独立成一个个…

RocketMQ基础概念

目录 1.简介 2.架构 3.核心概念 1.简介 RocketMQ 是一款开源的分布式消息中间件&#xff0c;最初由阿里巴巴集团开发并开源。它旨在为分布式系统提供可靠、高性能、可扩展的消息通信能力。RocketMQ和RabbitMQ、KAFKA一起并列为现在主流的三大消息中间件。 一般MQ可以从三个…

Python(八)字符编码

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

06_HDMI 显示器驱动设计与验证

06_HDMI 显示器驱动设计与验证 1. HDMI 接口及引脚定义1.1 HDMI A Type 接口引脚图1.2 HDMI A Type 接口引脚定义 2. HDMI 原理2.1 HDMI 显示原理2.2 TMDS 传输原理 3. 实验目标4. 程序框图4.1 顶层模块4.2 时钟生成模块4.3 HDMI 驱动控制模块4.3.1 第一个步骤4.3.2 编码模块参…

反垄断在中国

中国通过反垄断法 中国通过了具有里程碑意义的反托拉斯立法,外国企业表示谨慎性的欢迎,希望该法案能带来更大的开放性,但需要观察它是如何实施的。(华尔街日报 2007年8月32日报道) 反垄断法禁止垄断协议和诸如卡特尔及价格操纵,但允许能促进创新和技术进步的垄断之存在。…

微软亚洲研究院推出AI编译器界“工业重金属四部曲”

编者按&#xff1a;编译器在传统计算科学中一直是一个重要的研究课题。在人工智能技术快速发展和广泛应用的今天&#xff0c;人工智能模型需要部署在多样化的计算机硬件架构上。同时&#xff0c;训练和部署大型人工智能模型时又对硬件性能有着更高的要求&#xff0c;有时还需根…

c#示例-json序列化和json树

序列化 由于指针和引用类型的存在&#xff0c;在运行中的程序中&#xff0c;数据不一定是整块的。 可能东一块西一块散落在内存的各个地方。 序列&#xff0c;是指连续且有序的一个整体。序列化就是把数据变为连续有序整体的过程。 经过这样处理后的数据就可以方便的进行传输…

1130 - Host XXX‘ is not allowed to connect to this MySQL server

mysql 连接报错 这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有没有用户 解决的方法&#xff1a; 登入mysql后&#xff0c;更改 “mysql” 数据库里的 “user” 表里的 “host” 项&#xff0c;从”localhost”改称’%’。 1、连接服务器: mysql -u root -p…

万字解读 | 数据可视化平台--FineBI

什么是BI 学习目标 知道什么是BI 知道FineBI的优势 1. 商业智能: BI&#xff08;Business Intelligence&#xff09;是指通过收集、分析和解释企业内外部数据&#xff0c;为企业决策提供支持和指导的一种技术和工具。商业智能的目标是帮助企业管理者和决策者更好地理解企业…

vivado 添加 pynq-z2板

以vivado2019.02版本为例 1下载地址 https://www.tulembedded.com/FPGA/ProductsPYNQ-Z2.html 2.点击下载 3.解压添加 注&#xff1a;如果没有board_files 可以自己创建一个 4.重新打开vivado

跨境电商企业实施WMS仓储管理系统有什么要注意的

在跨境电商行业中&#xff0c;仓储管理是关键的环节之一。为了提高仓储效率和准确性&#xff0c;许多跨境电商企业选择实施WMS仓储管理系统解决方案。然而&#xff0c;实施电商企业WMS系统并不是一项简单的任务&#xff0c;需要注意一些关键要点。本文将介绍跨境电商企业实施WM…

Ubuntu 18.04 Docker 安装配置 Apollo 6.0

百度 Apollo 安装测试&#xff08;1&#xff09; Apollo 6.0 安装完全指南 在这一步出错&#xff1a; 进入到 Apollo 源码根目录&#xff0c;打开终端&#xff0c;执行下述命令以启动 Apollo Docker 开发容器 ./docker/scripts/dev_start.sh并没有成功启动 Apollo docker 开发…

科技成果鉴定报告的重要性

科技成果鉴定是评估科技成果价值、可行性和科学性的过程&#xff0c;鉴定结果直接关系到科技成果的应用和推广。科技成果鉴定报告是鉴定结果的呈现和总结&#xff0c;对于科技成果的评估和利用具有重要的价值和意义。 1、科技成果价值评估&#xff1a;在科技创新和技术发展中…

在VMware Workstation安装 ESXI8.0初体验

文章目录 &#x1f41f;前言&#x1f41f;安装&#x1f41f;在VMware WorkStation中创建虚拟机&#x1f41f;ESXI部署安装&#x1f41f;安装完成后配置 &#x1f41f;前言 ESXI8.0版本开始最低RAM从以前的4GB变为8GB 本文所使用到的镜像以及Key都可以到我的网站中下载 地址&…

数学分析:k维曲面

这部分比较抽象&#xff0c;我就不按照书本上的定义来了&#xff0c;直接讲直观的理解。 一般来说&#xff0c;我们认为&#xff1a; 这是一个圆&#xff0c; 但同时也可以认为他是一个一维的曲面。 同理 是一个球面 但同时也是一个二维的曲面&#xff0c;依次类推。 我们…

AWS 云区域(region),可用区(AZ)

AWS 提供三种地理性组件&#xff1a; Regions&#xff1a;区域&#xff0c;即AWS提供云服务的一个区域&#xff0c;其目的是为了用户能就近接入&#xff0c;降低网络延迟。通常是一个城市的若干个AZ组成一个region。2016年&#xff0c;AWS 宣布在其全球region之间建设了100GbE…

对 Jenkins+ANT+Jmeter 接口测试的实践

目录 1、前言 2、框架与数据准备 3、脚本设计 4、整理测试报告 1、前言 JenkinsANTJMeter是一种常见的接口测试实践方案&#xff0c;可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具&#xff0c;ANT是一个构建工具&#xff0c;而JMeter是一个功能强大…

journalctl命令

要查看系统日志信息&#xff0c;使用journalctl工具即可。 不加任何参数&#xff0c;它将显示系统日志的全部信息&#xff1a;显示的顺序是从旧到新。 [rootvm1 ~]# journalctl -- Logs begin at Fri 2023-07-14 05:12:22 CST, end at Thu 2023-07-13 21:20:01 CST. -- Jul 14…