【零基础学Rust | 基础系列 | 函数,语句和表达式】函数的定义,使用和特性

在这里插入图片描述


文章标题

  • 简介
  • 一,函数
    • 1,函数的定义
    • 2,函数的调用
    • 3,函数的参数
    • 4,函数的返回值
  • 二,语句和表达式
    • 1,语句
    • 2,表达式
  • 总结:


简介

在Rust编程中,函数,语句和表达式是构建程序的基础元素。本篇文章将详细介绍这些元素的定义,使用和特性,并提供相关的代码示例。

一,函数

在Rust编程中,函数是一种基本的代码组织和复用方式。函数将一段代码封装起来,使其可以在程序中多次使用,提高了代码的可读性和可维护性。

1,函数的定义

在Rust中,函数的定义以关键字fn开始,后跟函数名,参数列表,返回值类型和函数体。函数名应该清晰地表达函数的功能,参数列表中的每个参数都有一个名字和一个类型,返回值类型是函数返回的数据类型,函数体是由花括号包围的一段代码。

例如,定义一个计算两个整数和的函数:

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

在这个函数中,ab是参数,i32是参数和返回值的类型,a + b是函数体。

2,函数的调用

函数定义后,可以通过函数名和参数列表来调用。函数调用会执行函数体中的代码,并返回一个值。

例如,调用上面定义的add函数:

fn main() {let sum = add(1, 2);println!("The sum is {}", sum);
}

在这个例子中,add(1, 2)是函数调用,它会执行add函数的函数体,并返回结果3

3,函数的参数

函数的参数是在函数定义时声明的一些变量,它们在函数调用时被赋值。函数参数可以是任何类型,包括基本类型,复合类型,甚至是函数类型。

例如,定义一个接受函数作为参数的函数:

fn apply<F: Fn(i32) -> i32>(f: F, x: i32) -> i32 {f(x)
}fn square(x: i32) -> i32 {x * x
}fn main() {let result = apply(square, 5);println!("The result is {}", result);
}

在这个例子中,apply函数接受一个函数f和一个整数x作为参数,它调用函数f并传入x,然后返回结果。

4,函数的返回值

函数的返回值是函数执行后返回的结果。在函数定义中,返回值类型是在参数列表后的->符号后指定的。如果函数没有返回值,可以省略->和返回值类型。

函数体的最后一个表达式就是函数的返回值,可以省略return关键字。如果需要在函数体中的其他地方返回值,可以使用return关键字。

例如,定义一个可能提前返回的函数:

fn max(a: i32, b: i32) -> i32 {if a > b {return a;}b
}

在这个函数中,如果a > b,则提前返回a,否则返回b


二,语句和表达式

在Rust编程中,语句和表达式是两种基本的代码元素,它们构成了Rust程序的主体。理解语句和表达式的含义和用法,是掌握Rust编程的关键。下面将详细介绍语句和表达式的定义,特性和用法。

1,语句

在Rust中,语句是执行操作但不返回值的代码片段。语句主要分为两类:声明语句和表达式语句。

  1. 声明语句

声明语句用于声明变量或函数。例如,以下代码中的let x = 5;是一个声明语句,它声明了一个变量x并赋值为5。

fn main() {let x = 5;
}

在Rust中,变量默认是不可变的,如果需要改变变量的值,需要在声明时加上mut关键字。

fn main() {let mut x = 5;x = x + 1;
}
  1. 表达式语句

表达式语句是包含表达式的语句。在Rust中,如果一个表达式后面跟着分号,那么它就变成了一个表达式语句,这个表达式的值会被丢弃。

例如,以下代码中的x = x + 1;是一个表达式语句,它包含了表达式x = x + 1

fn main() {let mut x = 5;x = x + 1;
}

2,表达式

表达式是计算并返回值的代码片段。在Rust中,几乎所有的代码都可以被视为表达式。

例如,以下代码中的5x + 1{ let y = x + 1; y }都是表达式。

fn main() {let x = 5;let y = {let y = x + 1;y};
}

在这个例子中,{ let y = x + 1; y }是一个块表达式,它的值是最后一个表达式的值,即y

在Rust中,表达式的类型是由它的值决定的。例如,表达式5的类型是i32,表达式x + 1的类型也是i32


总结:

函数,语句和表达式是Rust编程的基础元素。理解它们的定义,使用和特性,是学习Rust的重要步骤。通过本篇文章的学习,应该对这些元素有了更深入的理解。在实际编程中,应尝试使用这些元素来构建和优化代码,提高代码的效率和可读性。

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

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

相关文章

c++--二叉树应用

1.根据二叉树创建字符串 力扣 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需要省略所有不影响字符…

vscode中无法使用git解决方案

1 首先查看git安装目录 where git 2 找到bash.exe 的路径 比如&#xff1a;C:/Users/Wangzd/AppData/Local/Programs/Git/bin/bash 3 找到vscode的配置项setting.json 4 添加 "terminal.integrated.shell.windowns": "C:/Users/Wangzd/AppData/Local/Pr…

vue2-vue中mixin到底是什么?

1、mixin是什么&#xff1f; Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类。 Mixin类通常作为功能模块使用&#xff0c;在需要该功能时“混入”&#xff0c;有利于代码的复用又避免了多继承的复杂。 1.1 vue中…

stl_list类(使用+实现)(C++)

list 一、list-简单介绍二、list的常用接口1.常见构造2.iterator的使用3.Capacity和Element access4.Modifiers5.list的迭代器失效 三、list实现四、vector 和 list 对比五、迭代器1.迭代器的实现2.迭代器的分类&#xff08;按照功能分类&#xff09;3.反向迭代器(1)、包装逻辑…

wpf画刷学习1

在这2篇博文有提到wpf画刷&#xff0c; https://blog.csdn.net/bcbobo21cn/article/details/109699703 https://blog.csdn.net/bcbobo21cn/article/details/107133703 下面单独学习一下画刷&#xff1b; wpf有五种画刷&#xff0c;也可以自定义画刷&#xff0c;画刷的基类都…

Maven分模块-继承-聚合-私服的高级用法

Maven分模块-继承-聚合-私服的高级用法 JavaWeb知识&#xff0c;介绍Maven的高级用法&#xff01;&#xff01;&#xff01; 文章目录 Maven分模块-继承-聚合-私服的高级用法1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承…

无人机巢的作用及应用领域解析

无人机巢作为无人机领域的创新设备&#xff0c;不仅可以实现无人机的自主充电和电池交换&#xff0c;还为无人机提供安全便捷的存放空间。为了帮助大家更好地了解无人机巢&#xff0c;本文将着重解析无人机巢的作用和应用领域。 一、无人机巢的作用 无人机巢作为无人机技术的重…

【chrome扩展开发】vue-i18n使用问题及解决方案

记录chrome扩展开发时调用vue-i18n的一些问题和解决方法 环境 vue: ^3.3.4vue-i18n: ^9.2.2vite: ^4.4.8 错误1 Uncaught (in promise) EvalError: Refused to evaluate a string as JavaScript because unsafe-eval is not an allowed source of script in the following Con…

Spring Bean的生命周期

文章目录 Spring Bean的生命周期加载Bean对象创建Bean对象构造对象填充属性初始化实例注册销毁 销毁 Spring Bean的生命周期 Spring Bean的生命周期就是指Bean对象从创建到销毁的过程&#xff0c;大体可以分为&#xff1a;实例化、属性赋值、初始化、使用、销毁。 加载Bean对象…

Modelsim打开后报unable to checkout a viewer license

找到Modelsim安装包中的MentorKG.exe文件和patch64_dll.bat文件&#xff0c;将这两个文件拷贝到Modelsim安装目录中的win64文件夹&#xff1a; 在win64文件夹中找到mgls64.dll&#xff0c;将它拷贝粘贴一份后修改名字为mgls.dll&#xff1a; 双击win64文件夹中的patch64_dll.ba…

【C++】数据结构与算法:常用排序算法

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍常用排序算法。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#x1…

Red Hat 安装MySQL 8.0与 Navicat

目录 Red Hat 安装 MySQL 8.0 1、更新软件包列表 2、安装MySQL服务器和客户端 3、启动MySQL服务 4、确保MySQL服务器正在运行 5、root 用户的密码 6、登录MySQL&#xff0c;输入mysql密码 7、MySQL默认位置 Red Hat 安装 Navicat 1、下载 Navicat 2、执行命令 Red H…

STM32的电动自行车信息采集上报系统(学习)

摘要 针对电动自行车实时监管不便的问题&#xff0c;设计了一种基于STM32的电动自行车信息采集系统&#xff0c;通过获取电池、位置和行驶状态信息并上报到服务器中&#xff0c;实现实时监管。 通过多路串口请求电池、行驶状态和位置信息&#xff0c;以并发方式进行数据接收、…

Podman Desktop安装与使用-Windows10

下载 containers/podman 地址 Podman Desktop Downloads 地址 我这里演示的是podman-v4.4.4.msi和podman-desktop-0.13.0-setup.exe 安装 先决条件&#xff1a;由于 Podman 使用 WSL&#xff0c;因此您需要最新版本的 Windows 10 或 Windows 11。在 x64 上&#xff0c;WSL…

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.

在 centos 7 系统上&#xff0c;使用常规命令&#xff1a;systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误&#xff1a; Failed to start mysqld.service: Unit not found. 根据所报错误&#xff0c;在网上搜罗了一圈&#xff0c;未果&#x…

【Unity3D应用案例系列】Unity3D中实现文字转语音的工具开发

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;会遇到将文字转语音输出的需求&#xff0…

Stable Diffusion系列课程二:ControlNet

AUTOMATIC1111/stable-diffusion-webui参考B站Nenly视频《零基础学会Stable Diffusion》、视频课件推荐网站&#xff1a;stable-diffusion-art、Civitai&#xff08;魔法&#xff09; 、libilibi、AI艺术天堂推荐Stable Diffusion整合资料&#xff1a; NovelAI资源整合、《AI绘…

Vivado使用入门之一:Schematic图

目录 一、前言 二、Schematic类型 2.1 Schematic分类 2.2 RTL ANALYSIS 2.3 SYSTHESIS 2.4 IMPLEMENTATION 三、Schematic功能 3.1 界面工具栏 3.2 右键功能项对比 3.3 右键功能项说明 3.4 逻辑图界面 一、前言 在一个设计中&#xff0c;有时因定位或其他原因需要去查…

【IMX6ULL驱动开发学习】22.IMX6ULL开发板读取ADC(以MQ-135为例)

IMX6ULL一共有两个ADC&#xff0c;每个ADC都有八个通道&#xff0c;但他们共用一个ADC控制器 1.设备树 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 adc1: adc02198000 {compatible "fsl,imx6ul-adc", "fsl,vf610-adc";reg <0x0219…

【Java】智慧工地管理系统源码(SaaS模式)

智慧工地是聚焦工程施工现场&#xff0c;紧紧围绕人、机、料、法、环等关键要素&#xff0c;综合运用物联网、云计算、大数据、移动计算和智能设备等软硬件信息技术&#xff0c;与施工生产过程相融合。 一、什么是智慧工地 智慧工地是指利用移动互联、物联网、智能算法、地理信…