Rust之通用编程

1、变量与可变性:

在Rust语言中,变量默认是不可变的,所以一旦变量被绑定到某个值上面,这个值就再也无法被改变。

可以通过在声明的变量名称前添加mut关键字来使其可变。除了使变量的值可变,mut还会向阅读代码的人暗示其他代码可能会改变这个变量的值。

2、数据类型:

(1)、标量类型:

a、整数:

在Rust中的整数类型:

在Rust中的整数字面量:

在Rust中,默认使用的类型是i32

b、浮点数:

在Rust中的浮点数分为f32f64两种类型,其分别对应单精度浮点数和双精度浮点数。

c、布尔值:

Rust的布尔类型只拥有两个可能的值:truefalse,它会占据单个字节的空间大小。可以使用bool来表示一个布尔类型。

d、字符:

在Rust中,char类型被用于描述语言中最基础的单个字符。

Rust中的char类型占4字节,是一个Unicode标量值,这也意味着

它可以表示比ASCII多得多的字符内容。拼音字母、中文、日文、韩文、零长度空白字符,甚至是emoji表情都可以作为一个有效的char类型值。

(2)、复合类型:

a、元组:

元组是一种常见的复合类型,可以将其他不同类型的多个值组合进一个复合类型中。元组拥有固定的长度,无法在声明结束后增加或减少其中的元素数量。

  • 解构:将元组中的数据解析出来的操作。例如:
rust 复制代码
fn main() { 
	 let tup = (500, 6.4, 1); 
	 let (x, y, z) = tup; 
	 println!("The value of y is: {}", y); 
}

这段程序首先创建了一个元组,并将其绑定到了变量tup上。随后,let关键字的右侧使用了一个模式将tup拆分为3个不同的部分:x、y和z。最后,程序将变量y的值。

  • 通过点号(.)来访问元组中的值,例如
rust 复制代码
fn main() { 
	 let x: (i32, f64, u8) = (500, 6.4, 1); 
	 let five_hundred = x.0; 
	 let six_point_four = x.1; 
	 let one = x.2; 
} 

这段程序首先创建了一个元组x,随后又通过索引访问元组的各个元素,并将它们的值绑定到新的变量上。

b、数组:

可以在数组中存储多个值的集合。与元组不同,数组中的每一个元素都必须是相同的类型。Rust中的数组拥有固定的长度,一旦声明就再也不能随意更改大小。

在Rust中,你可以将以逗号分隔的值放置在一对方括号内来创建一个数组。

i、数组初始化的方法:

  • 使用一对方括号,并在方括号中填写数组内所有元素的类型、一个分号及数组内元素的数量,例如:
rust 复制代码
let a: [i32; 5] = [1, 2, 3, 4, 5];//的i32便是数组内所有元素的类型,而分号之后的5则表明当前的数组包含5个元素。
  • 假如你想要创建一个含有相同元素的数组,那么你可以在方括号中指定元素的值,并接着填入一个分号及数组的长度,例如:
rust 复制代码
let a = [3; 5];

ii、访问数组:

通过索引来访问一个数组中的所有元素,例如:

rust 复制代码
fn main() { 
 let a = [1, 2, 3, 4, 5]; 
 let first = a[0]; 
 let second = a[1]; 
}

在这个例子中,first变量会被赋值为1,这正是数组中索引0对应的那个值。同样,second变量将获得数组中索引1对应的那个值,也就是2。

3、函数:

在Rust中,可以使用fn来声明一个新的函数。

Rust中使用蛇形命名法来作为规范函数和变量名称的风格。蛇形命名法只使用小写字母来进行命名,并以下划线分割单词。

在Rust中,函数定义以fn关键字开始并紧随函数名称与一对圆括号,另外还有一对花括号用于标识函数体开始和结尾的地方。

使用函数名加圆括号来调用函数。

(1)、函数参数:

当函数存在参数时,需要在调用函数的时候为这些参数提供具体的值。

在函数签名中,必须显式地声明每个参数的类型。由于类型被显式地注明,因此编译器不需要通过其他部分的代码进行推导就能明确地知道编程者的意图。

(2)、函数体中的语句和表达式:

在Rust中,语句和表达式为两个不同的概念。语句是指那些执行操作但是不返回值的指令,表达式是指那些进行计算并产生一个值作为结果的指令。

在表达式的结尾没有;,而在语句的结尾有;,当在表达式的结尾加上;,表达式就会变成语句,而不会返回任何值。

(3)、函数的返回值:

函数可以调用它的代码返回值,不用为返回值命名,但是需要在箭头符号(->)的后面声明它的类型。在Rust中,函数的返回值等同于函数体最后一个表达式的值。也可以使用return关键字并指定一个值来提前从函数中返回,但大多数函数都是隐式地返回了最后的表达式。

4、控制流:

通过条件来执行或重复执行某些代码,在Rust中,用来控制程序执行流的结构主要就是if表达式循环表达式

(1)、if表达式:

if表达式允许我们根据条件执行不同的代码分支。

(2)、使用循环重复执行代码:

a、使用loop重复执行:

可以使用loop关键字来指示Rust反复执行某一块代码,直到显式地声明退出为止。

b、while条件循环:

在每次执行之前都判断一次条件,假如条件为真则执行代码片段,假如条件为假或在执行过程中遇到break就退出当前循环。

c、for循环:

示例:

rust 复制代码
fn main() { 
	let a = [10, 20, 30, 40, 50]; 
	for element in a.iter() { 
		println!("the value is: {}", element); 
	} 
}

使用for循环遍历数组。

相关推荐
techdashen4 小时前
Go设计取舍之四: map不变时能否并发修改不同value
开发语言·后端·golang
小小小米粒4 小时前
阿姆达尔定律(Amdahl‘s Law)
java·开发语言
知彼解己4 小时前
Java 版本演进
java·开发语言·spring boot
风样滴男人哟4 小时前
PHP特性之反射类ReflectionClass机制
android·开发语言·php
看昭奚恤哭4 小时前
Flutter 布局核心思想
开发语言·javascript·flutter
朱容zr3331334 小时前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化
用户608186527905 小时前
一文吃透 Avalonia 布局容器|Grid 到 UniformGrid 核心用法 + 语法糖实战
后端
IsSh9nj6q5 小时前
Python全栈应用搭建神器magic-dash .新版本介绍
开发语言·python·dash
Ai拆代码的曹操5 小时前
Dubbo 线程池爆满排坑:Linux 用户线程数限制,一个容易被忽略的根因
后端·源码阅读
NutShell Wang5 小时前
Vite 8.1 深度拆解:Rolldown 统一打包器如何终结前端构建的「双引擎时代」
前端·rust·开源·vite·开发者工具·vibe coding