4.通用编程概念

目录

  • 一、变量与常量
    • 1.1 变量
    • 1.2 常量
  • 二、遮蔽
  • 三、数据类型
    • 3.1 标量类型
      • 1. 整型
      • 2. 浮点型
      • 3. 布尔类型
      • 4.字符类型
    • 3.2 复合类型
      • 1. 元组
      • 2. 数组
  • 四、函数
  • 五、语句和表达式
  • 六、函数的返回值

一、变量与常量

1.1 变量

      在Rust中默认的变量是不可变的,如果修改其值会导致错误。

fn main(){let x = 3;x = 5;  //error[E0384]: cannot assign twice to immutable variable `x`
}

定义变量时添加mut关键字就能解决以上问题,例如let mut x = 3

1.2 常量

  1. 常量必须使用const定义,且类型必须被标注。
  2. 常量可以在任何作用域内进行声明,包括全局作用域。
  3. 常量只可以绑定到常量表达式
  4. 常量使用全大写字母,每个单词之间用下划线分隔
  5. 数字可以用_分隔,以增加可读性
const MAX_POINTS:u32  100_000;

二、遮蔽

在Rust中,可以定义不同类型/相同类型的相同变量而不会报错,例如

fn main(){let x = 3;let x = x + 5;  //同为i32类型的xlet x = String::from("Hello");  //将x设置为String类型println!("{}", x);
}

三、数据类型

      Rust是一门静态类型语言,在编译期内就必须知道变量的类型,因此将一个字符型的整数转换成真正的整数型时,就必须显式的定义类型。

fn main(){let x  = "42".parse().expect("Not a number"); //let x:u32  = "42".parse().expect("Not a number"); 这是正确的println!("{}", x);
}

通过下面的报错信息可以很明显的知道应该如何修改源码
在这里插入图片描述

3.1 标量类型

      Rust有四种基本的标量类型:整型、浮点型、布尔型以及字符型

1. 整型

      下表展示的Rust语言中的整型,后面的数字代表了所示用的位数,isize 和 usize 类型取决于程序运行的计算机体系结构。

长度有符号类型无符号类型
8 位i8u8
16 位i16u16
32 位i32u32
64 位i64u64
128位i128u128
archisizeusize

也可以按照下表中所示的任意形式来表示整型的字面量

数字字面量示例
十进制98_222
十六进制0xff
八进制0o77
二进制0b1111_0000
字节 (仅限于 u8)b’A’

整型溢出的问题

      u8可以存放0~255的值,如果存放256则会发生整型溢出,在调试模式(debug)下编译,Rust会检查溢出,在发布模式(release)下构建时,Rust对于溢出的处理时采用取余的方式循环。比如在 u8 的情况下,256 变成 0,257 变成 1。
      要显式处理溢出的可能性,可以使用标准库针对原始数字类型提供的以下一系列方法:

  • 使用 wrapping_* 方法在所有模式下进行循环,例如 wrapping_add
  • 如果使用 checked_* 方法时发生溢出,则返回 None 值
  • 使用overflowing_*方法返回该值和一个指示是否存在溢出的布尔值
  • 使用 saturating_* 方法使值达到最小值或最大值

2. 浮点型

      在 Rust 中浮点型数字也有两种基本是 f32 和 f64,它们的大小分别为 32 位和 64 位。默认浮点类型是 f64,浮点型都是有符号的。

fn main(){let x = 83.1;       //f64let y:f32 = 83.1;   //f32
}

3. 布尔类型

      Rust 中的布尔类型有两个可能的值:true 和 false。布尔值的大小为 1 个字节。Rust 中的布尔类型可以使用 bool进行显式的声明。

fn main() {let t = true;let f: bool = false; // 显式声明为布尔型
}

4.字符类型

      字符类型字面量用单引号引起来,Rust 的字符类型大小为 4 个字节,表示的是一个 Unicode 标量值,这意味着它可以表示的远远不止是 ASCII。标音字母,中文/日文/韩文的文字,emoji,还有零宽空格(zero width space)在 Rust 中都是合法的字符类型。

fn main() {let c = 'z';let z = 'ℤ';let heart_eyed_cat = '😻';
}

3.2 复合类型

      Rust有两种复合类型:元组(tuple)和数组(array)。

1. 元组

      将多种类型的多个值组合到一个复合类型中的一种基本方式,元组的长度是固定的。

fn main(){let tup = (500, 30.1, "China");  //默认的类型创建元组let tup2:(i64, f32, bool) = (35, 34.1, true);  //显式创建元组let (x, y, z) = tup2; //将tup2中的三个值分别赋给x,y,zprintln!("{} {} {}", x, y, z); //访问tup2的方式1println!("{} {} {}", tup2.0, tup2.1, tup2.2) //访问tup2的方式1
}

2. 数组

数组的每个元素的元素类型必须相同,且数据的长度固定。

fn main(){let a = [1, 2, 3, 4, 5]; //定义默认i32的5个元素的数组,组内元素为1~5let b: [i64; 5] = [1, 2, 3, 4, 5]; //定义i64型的5个元素的数组,组内元素为1~5let c = [3; 5];   //长度为5,元组全为3,即相当于[3, 3, 3, 3, 3]for item in c{println!("item = {}", item) //循环输出c内的元素}println!("a[0] = {}", a[0]);   //单个访问
}

四、函数

Rust的函数以fn关键字开头,函数和变量名中所有字母都是小写并使用下划线分隔单词,函数参数必须指明类型。

fn another_function(x: i32, source: &str){println!("x = {}, source = {}", x, source);
}fn main(){another_function(32, "China");
}

五、语句和表达式

  • 函数的函数体由一系列语句组成,也可以表达式结尾。
  • 语句是执行一些操作但不返回值的指令。表达式(expression)计算并产生一个值。
fn main(){// let x = (let y = 6); //语句不返回值,因此bool得不到初始值let x = {let  y = 6;y + 1    //不能加分号结尾,加分号后就成了语句};  //{}整体是表达式,返回值是y+1=7println!("x = {}", x);
}

六、函数的返回值

  • rust并不对返回值命令,以->声明返回值的类型。
  • rust中的函数返回值等于最后一个表达式的值。
  • 使用return x可以提前返回

fn get_return_value(x: i32) -> i32 {if x < 0{return -1;}x
}fn main() {let x = get_return_value(-1);let y = get_return_value(10);println!("{}, {}", x,y);  //-1, 10
}

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

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

相关文章

《青少年编程与数学》课程方案:4、课程策略

《青少年编程与数学》课程方案&#xff1a;4、课程策略 一、工程师思维二、使命感驱动三、价值观引领四、学习现代化五、工作生活化六、与时代共进 《青少年编程与数学》课程策略强调采用工程师思维&#xff0c;避免重复造轮子&#xff0c;培养使命感&#xff0c;通过探索兴趣、…

编程语言有哪些?这些希望你都知道

编程语言有哪些 编程语言有很多种&#xff0c;包括但不限于以下几种&#xff1a; Java&#xff1a;当今最普遍使用的开发语言之一&#xff0c;简单易学&#xff0c;且跨平台性非常强&#xff0c;对网络开发的支持令人称赞。Python&#xff1a;语法清楚&#xff0c;干净&#…

【Vue】如何提供访问vuex的数据

文章目录 一、提供数据二、访问Vuex中的数据通过$store访问的语法1&#xff09;模板中使用2&#xff09;组件逻辑中使用3&#xff09;js文件中使用 三、通过辅助函数 - mapState获取 state中的数据 一、提供数据 State提供唯一的公共数据源&#xff0c;所有共享的数据都要统一…

[office] 快速删除excel中的空行和列的方法 #其他#学习方法#经验分享

快速删除excel中的空行和列的方法 用户在网上下载好的Excel表格打开之后发现有很多空白行&#xff0c;怎么样将这些空白行或单元格一次性删除掉呢?下面教大家在Excel中用定位一次性可以把空白行删除 用户在网上下载好的Excel表格打开之后发现有很多空白行&#xff0c;怎么样将…

Vue3 使用audio播放语音+监听播放语音完成事件

需求&#xff1a;输入一段文字&#xff0c;点击语音框&#xff0c;将本地语音&#xff08;提前准备好的&#xff09; 播放出来 播放中效果 代码 <div class"listConAI" click"handleOpenSpeech" ><imgsrc"../../../../assets/images/blueo…

web前端 孙俏:深度探索与实战之路

web前端 孙俏&#xff1a;深度探索与实战之路 在这个数字化、信息化的时代&#xff0c;web前端技术以其独特的魅力&#xff0c;吸引着越来越多的开发者投身其中。今天&#xff0c;我们将跟随孙俏的脚步&#xff0c;一同探索web前端的深度与广度&#xff0c;揭开其神秘的面纱。…

中文文案写作有哪些合适的AIGC工具?

这是计育韬老师第 8 次开展面向全国高校的新媒体技术公益巡讲活动了。而在每场讲座尾声&#xff0c;互动答疑环节往往反映了高校师生当前最普遍的运营困境&#xff0c;特此计老师在现场即兴答疑之外&#xff0c;会尽量选择有较高价值的提问进行文字答疑梳理。 *本轮巡讲主题除了…

【Vue】开启严格模式及Vuex的单项数据流

文章目录 一、引出问题二、开启严格模式 一、引出问题 目标 明确 vuex 同样遵循单向数据流&#xff0c;组件中不能直接修改仓库的数据 这样数据的流向才会更加清晰&#xff0c;将来对数据的修改&#xff0c;都在仓库内部实现的&#xff0c;更易于维护 直接在组件中修改Vuex中…

Git:版本控制的艺术与GitLab实战指南

在当今快速发展的软件开发领域&#xff0c;高效、协同的代码管理是项目成功的关键。Git&#xff0c;作为一款分布式版本控制系统&#xff0c;凭借其强大的功能和灵活性&#xff0c;成为了众多开发者首选的版本控制工具。本文将带您深入探索Git的核心概念、基础操作&#xff0c;…

B3870 [GESP202309 四级] 变长编码

[GESP202309 四级] 变长编码 题目描述 小明刚刚学习了三种整数编码方式&#xff1a;原码、反码、补码&#xff0c;并了解到计算机存储整数通常使用补码。但他总是觉得&#xff0c;生活中很少用到 2 31 − 1 2^{31}-1 231−1 这么大的数&#xff0c;生活中常用的 0 ∼ 100 0…

Spring进阶技巧:利用AOP提前介入的巧妙实践

Spring框架中的面向切面编程&#xff08;AOP&#xff09;是一种强大的机制&#xff0c;它允许开发者在不修改原有代码的情况下&#xff0c;对程序进行横向切面的功能扩展。AOP提供了一种方式&#xff0c;可以在目标Bean的生命周期早期阶段就实施切面逻辑&#xff0c;这为我们在…

Python 中如何使用 lambda 函数

在 Python 中&#xff0c;可以使用 lambda 函数来创建匿名函数。lambda 函数的语法是&#xff1a;lambda 参数: 表达式。以下是一些使用 lambda 函数的例子&#xff1a; 通过 lambda 函数来计算两个数的和&#xff1a; add lambda x, y: x y print(add(2, 3)) # 输出 5通过…

Oracle 日志挖掘

oracle 11g 日志挖掘测试 需要开启补充日志 alter database add supplemental log data; SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;在用户下执行一些删除&#xff0c;插入等操作 SQL> create table zxy( …

LLM评测数据集

1. C-Eval 数据集源地址: C-Eval Official Repository 数据范围: 该数据集包括学科类知识测试&#xff0c;涵盖广泛的学科知识&#xff0c;例如数学、物理、化学等。 数据集大小及数据形式: 数据集包含13,948道单选题&#xff0c;题目均为中文。 论文地址: C-Eval: A Multi-…

【一百一十】【算法分析与设计】[SDOI2009] HH的项链,树状数组应用,查询区间的种类数,树状数组查询区间种类数

P1972 [SDOI2009] HH的项链 [SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运&#xff0c;所以每次散步完后&#xff0c;他都会随意取出一段贝壳&#xff0c;思考它们所表达的含义。HH 不断地收集新的贝壳&#xff0c;因此&am…

SMS - 基于阿里云实现手机短信验证码登录(无需备案,非测试)

目录 SMS 环境调试 从阿里云云市场中购买第三方短信服务 调试短信验证码功能 实战开发 封装组件 对外接口 调用演示 SMS 环境调试 从阿里云云市场中购买第三方短信服务 a&#xff09;进入阿里云首页&#xff0c;然后从云市场中找到 “短信” &#xff08;一定要从 云…

如何实现网站HTTPS访问

在当今网络安全至关重要的时代&#xff0c;HTTPS已经成为网站安全的基本标准。HTTPS&#xff08;超文本传输安全协议&#xff09;通过在HTTP协议基础上加入SSL加密层&#xff0c;确保了数据在用户浏览器和服务器之间的传输是加密的&#xff0c;有效防止数据被窃取或篡改&#x…

calico node一直not ready

背景 我司某个大数据集群在做完添加到集群联邦管理后&#xff0c;该集群的calico-node全部处于not ready 状态&#xff0c;导致集群中节点之前的跨节点容器网络不通。 操作 将大数据所在的k8s集群添加到集群联邦的控制平面后&#xff0c;我们为了做各个子集群之间的容器网络…

换热器设计参数的选用

1 换热管类型 光管&#xff1a;适用于任何条件&#xff1b;应用面广 螺纹管&#xff1a;壳程流体的膜传热系数相当于管程传热系数1/3~3/5的场合&#xff1b;强化壳程传热系数&#xff0c;提高总传热系数&#xff1b;结垢速率低&#xff0c;结垢周期长。 波纹管&#xff1a;管…

使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理

教程简述 在本教程中&#xff0c;您将学习在阿里云交互式建模平台PAI-DSW x Free Prompt Editing&#xff08;CVPR2024中选论文算法&#xff09;图像编辑算法&#xff0c;开发个人AIGC绘图小助理&#xff0c;实现文本驱动的图像编辑功能单卡即可完成AIGC图片风格变化、背景变化…