【零基础学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的重要步骤。通过本篇文章的学习,应该对这些元素有了更深入的理解。在实际编程中,应尝试使用这些元素来构建和优化代码,提高代码的效率和可读性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pytest测试框架1

目录&#xff1a; 1.pytest简介、安装与准备2.pytest命名规则3.pycharm配置与界面化运行4.pytest测试用例结构5.pytest测试用例断言6.pytest测试框架结构7.计算器实战 1.pytest简介、安装与准备 前言 自动化测试前&#xff0c;需要提前准备好数据&#xff0c;测试完成后&am…

操作系统复习总结1

操作系统复习总结&#xff0c;仅供笔者复习使用&#xff0c;参考教材&#xff1a; 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为&#xff1a;计算机系统概述&#xff1b; 计算机系…

String类及其工具类

一、String类 1.字符串对象 String str new String("hello");String对象是final修饰的&#xff0c;不可修改的&#xff0c;修改后的字符串对象是另外一个对象&#xff0c;只是修改了引用地址。每次创建都会创建一个新的对象。 2. 字面量 String s "hello&…

首批获得金融级行业云平台认证,天翼云深耕行业云

云计算下半场看什么&#xff1f; 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速&#xff0c;上云已是政企用户推动其数字化转型不断深入的重要抓手&#xff0c;成为不可阻挡的趋势。 与互联网用户相比&#xff0c;政企用户上云极为…

uni-app——下拉框多选

一、组件components/my-selectCheckbox.vue <template><view class"uni-stat__select"><span v-if"label" class"uni-label-text">{{label &#xff1a;}}</span><view class"uni-stat-box" :class"…

mediasoup Lite ICE实现说明

目录 一. 前言 二. Lite ICE流程 三. STUN协议说明 STUN Header STUN Body 四. mediasoup Lite ICE实现源码剖析 一. 前言 ICE 是一种交互式建立连接的流程协议。ICE 有两种模式&#xff08;Full ICE 和 Lite ICE&#xff09;&#xff0c;Full ICE 要求建立连接的双方都要…

ruoyi若依 组织架构设计--[ 角色管理 ]

ruoyi若依 组织架构设计--[ 角色管理 ] 角色新增后端代码 角色修改后端代码 角色查询角色删除角色分配数据权限后端代码 角色分配用户 角色新增 后端代码 有一点&#xff0c;我认为新增的时候&#xff0c;也需要修改redis中的权限。 角色修改 后端代码 因为修改了role_menu表了…

坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第2期培训

中国邮政储蓄银行金融科技前沿技术发展与应用场景第2期培训圆满结束 中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点…

hcip——期中小试

要求&#xff1a; 1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2 、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3 、整张拓扑均使用私网地址进行配置。 4 、整张网络中&#xff0c;运行 O…

Unity Sort Group(排序组)

** Unity 中的Sort Group组组件允许让Sprite Renderer(精灵渲染器)重新决定渲染顺序. ** 作为组件存在 组件内容&#xff1a; Unity 使用Sort Group 组件的Sort layer 和Order in layer的值来确定排序组在渲染队列内相对与场景内其他排序组和游戏对象的优先级。 属性功能So…

最新2024届【海康威视】内推码【GTK3B6】

最新2024届【海康威视】内推码【GTK3B6】 【内推码使用方法】 1.请学弟学妹们登录校招官网&#xff0c;选择岗位投递简历&#xff1b; 2.投递过程中填写内推码完成内推步骤&#xff0c;即可获得内推特权。 内推码&#xff1a;GTK3B6 内推码&#xff1a;GTK3B6 内推码&…

【Python】基础数据结构:列表——元组——字典——集合

文章目录 一、简述二、Python中的列表详解2.1 创建列表2.2 访问列表元素2.3 修改列表元素2.4 列表切片2.5 列表方法2.6 列表推导式 三、Python中的元组详解3.1 创建元组3.2 访问元组元素3.3 元组是不可变的3.4 元组切片3.5 元组方法 四、Python中的字典详解4.1 创建字典4.2 访问…

ES6基础知识十:你是怎么理解ES6中 Decorator 的?使用场景?

一、介绍 Decorator&#xff0c;即装饰器&#xff0c;从名字上很容易让我们联想到装饰者模式 简单来讲&#xff0c;装饰者模式就是一种在不改变原类和使用继承的情况下&#xff0c;动态地扩展对象功能的设计理论。 ES6中Decorator功能亦如此&#xff0c;其本质也不是什么高大…

避免安装这5种软件,手机广告频繁弹窗且性能下降

在我们使用手机的日常生活中&#xff0c;选择合适的应用软件对于保持良好的使用体验至关重要。然而&#xff0c;有些软件可能会给我们带来不必要的麻烦和困扰。特别是那些频繁弹窗广告、导致手机性能下降的应用程序&#xff0c;我们应该尽量避免安装它们。 首先第一种&#xf…

VR实景导航——开启3D可视化实景导航新体验

数字化时代&#xff0c;我们大家出门在外都是离不开各种导航软件&#xff0c;人们对导航的需求也越来越高&#xff0c;而传统的导航软件由于精度不够&#xff0c;无法满足人们对真实场景的需求&#xff0c;这个时候就需要VR实景导航为我们实景指引目的地的所在。 VR实景导航以其…

【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动&#xff0c;平动&#xff0c;转动4【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现5【数理知识】协…

使用WebMvcConfigurationSupport后导致原来返回的json数据变为了xml的解决方法

问题 未使用WebMvcConfigurationSupport拦截时返回的数据都是JSON格式&#xff0c;使用WebMvcConfigurationSupport做拦截后数据的返回变为了XML的格式。 原因 在Spring框架中&#xff0c;WebMvcConfigurationSupport 是一个类&#xff0c;它可以用于自定义Spring MVC的配置…

P1833 樱花(多重背包)(内附封面)

樱花 题目背景 《爱与愁的故事第四弹plant》第一章。 题目描述 爱与愁大神后院里种了 n n n 棵樱花树&#xff0c;每棵都有美学值 C i ( 0 ≤ C i ≤ 200 ) C_i(0 \le C_i \le 200) Ci​(0≤Ci​≤200)。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸&#…

代码分析:循环创建N个子进程——为什么最后一个属于父进程?

黑马C/C 2018年32期代码分析 //循环创建n个子进程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h>int main() {int i 0;for(i0; i<3; i){//创建子进程pid_t pid fork();if(pid&…

Qt实现可伸缩的侧边工具栏(鼠标悬浮控制伸缩栏)

Qt实现可伸缩的侧边工具栏 一直在网上找&#xff0c;发现大多的实现方案都是用一个按钮&#xff0c;按下控制侧边栏的伸缩&#xff0c;但是我想要实现鼠标悬浮在侧边栏的时候就伸出&#xff0c;移开就收缩的功能&#xff0c;也没找到好的参考&#xff0c;所以决定自己实现一个…