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

news2024/9/28 3:19:51

在这里插入图片描述


文章标题

  • 简介
  • 一,函数
    • 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.coloradmin.cn/o/832334.html

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

相关文章

MySQL数据库安装(二)

夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库概述(一), 如果没有看过, 请观看上一章 一. MySQL 卸载 一.一 停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话…

类的多态性(JAVA)

目录 多态 重写 向上转型 类的多态性例子&#xff1a; 多态的优缺点 多态 所有的OOP语言都会有三个特征&#xff1a; 封装&#xff08;点击可跳转&#xff09;继承&#xff08;点击可跳转&#xff09;多态 多态体现&#xff1a;在代码运行时&#xff0c;当传递不同类对…

8.3day04git+数据结构

文章目录 git版本控制学习高性能的单机管理主机的心跳服务算法题 git版本控制学习 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 安装g…

GROW模型及其应用

一、作用 提供一套可操作的流程来理清现状&#xff0c;创造专注&#xff0c;减少干扰&#xff0c;使执行人从内心找到下阶段目标与达成目标的实施办法。是一套主要用于沟通、绩效辅导中的方法。 二、是什么 GROW模型由确定目标&#xff08;Goal&#xff09;、了解现状&…

神经网络的搭建与各层分析

为什么去西藏的人都会感觉很治愈 拉萨的老中医是这么说的 缺氧脑子短路&#xff0c;很多事想不起来&#xff0c;就会感觉很幸福 一、卷积层 解释&#xff1a;卷积层通过卷积操作对输入数据进行处理。它使用一组可学习的滤波器&#xff08;也称为卷积核或特征检测器&#xff09…

hive通过外表整合es,超详细过程。

参考官网 Apache Hive integration | Elasticsearch for Apache Hadoop [7.17] | Elastic 官网的介绍很简单&#xff0c;我看了很多博客&#xff0c;写的也很简单&#xff0c;但是我搞了半天才勉强成功&#xff0c;分享下&#xff0c;免得各位多走弯路。 环境准备 官网也很…

论文研读|生成式文本隐写发展综述

前言&#xff1a;最近接触了文本隐写这一研究领域&#xff0c;大概率以后深入这个方向开展研究&#xff0c;以下是本人近日对该领域研究现状的调研总结&#xff0c;以及生成式文本隐写代表性工作的相关介绍&#xff0c;便于厘清生成式文本隐写的发展脉络以及探寻未来研究空间。…

Go学习第三天

map的三种声明定义方式 声明map后&#xff0c;一定要make开辟空间&#xff0c;否则会报越界且不能使用 package mainimport "fmt"func main() {// 第一种声明方式// 声明myMap1是一种map类型 key是string value是stringvar myMap1 map[string]string// 判断一下map在…

接口请求(get、post、head等)详解

一&#xff0e;接口请求的六种常见方式&#xff1a; 1、Get 向特定资源发出请求&#xff08;请求指定页面信息&#xff0c;并返回实体主体&#xff09; 2、Post 向指定资源提交数据进行处理请求&#xff08;提交表单、上传文件&#xff09;&#xff0c;又可能导致新的资源的建…

【高光谱图像的去噪算法】通过全变异最小化对受激拉曼光谱图像进行去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

HCIP 交换综合实验--企业三层架构

题目 1、内网IP地址使用172.16.0.0/26分配 2、SW1和SW2之间互为备份 3、VRRP/STP/VLAN/Eth-trunk均使用 4、所有PC均通过DHCP获取IP地址 5、ISP只能配置IP地址 6、所有电脑可以正常访问ISP路由器环回 实验步骤 第一步、规划IP地址 R1-R2&#xff1a;100.1.1.0/24 R2-LSW1…

【远程桌面软件NoMachine】

Remote Access for Everybody 特色&#xff1a;快速、安全、跨平台、免费且简单易用&#xff0c;尤其是在带宽低、速率慢的网络环境下&#xff0c;NoMachine仍能保持良好的性能。 官网地址为&#xff1a;https://www.nomachine.com/

c++--简单多状态动态规划问题

PS:以下代码均为C实现 1.按摩师 力扣 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时间&#xff0c;因此她不能接受相邻的预约。给定一个预约请求序列&#xff0c;替按摩师找到最优的预约集合&#xff08;总…

【JAVA】正则表达式是啥?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言正则表达式正则表达式语法正则表达式的特点捕获组实例 前言 如果我们想要判断给定的字符串是否符合正则表达式的过滤逻辑&#xff08;称作“匹配”&#xff09;&#xff0c…

2023华数杯数学建模C题思路 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情…

搭建 Vite + Vue3 + Pinia + Element Plus 项目。

一、基础项目搭建&#xff1a; 开发工具推荐 VS Code 开发&#xff0c;配合插件如下&#xff1a; 插件名功能TypeScript Vue Plugin (Volar)用于 TypeScript 的 Vue 插件Vue Language Features (Volar)Vue3.0 语法支持 1. 创建项目 可以通过附加的命令行选项直接指定项目名…

第20节 R语言医学分析:某保险医疗事故赔偿因素分析

文章目录 某保险医疗事故赔偿因素分析源码源文件下载某保险医疗事故赔偿因素分析 我们分析数据集“诉讼”的第一个方法是确定样本数量、变量类型、缩放/编码约定(如果有)用于验证数据清理。 接下来,数据集看起来很干净,没有缺失值,并且对于分类变量,将编码约定替换为实际…

LeetCode 热题 100 JavaScript--543. 二叉树的直径

给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 var diameterOfBinaryTree function(root) {var maxDiameter…

leetcode每日一练-第88题-合并两个有序数组

一、解题方法 先合并&#xff0c;再排序 二、code class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for(int i0;i<n;i){nums1[mi]nums2[i];//将 nums2 中的元素逐个复制到 nums1 的尾部}sort(nums1.beg…

基于遗传算法的试题组卷(一)

基于遗传算法的试题组卷 IT企业每年都会在春季和秋季举行校园招聘&#xff0c;对于个性化定制的试卷需求量很大&#xff0c;如何组出又好又快的定制化试题对于IT企业非常重要。组卷技术主要针对知识点覆盖率&#xff0c;题型&#xff0c;难度系数&#xff0c;试题数量等一些试题…