app开发定制【一起学Rust | 基础篇】Rust基础——变量和数据类型

 

目录


前言

app开发定制经过前面几期的学习,app开发定制大家应该对已经有了个app开发定制初步的了解。app开发定制现在我们将从Rustapp开发定制的基础开始学习。

app开发定制变量是一个编程语言必要的内容,app开发定制学习任何一门编程语言app开发定制都离不开变量,app开发定制而是基础中的基础,学习Rustapp开发定制也是这样的。app开发定制本期我们将从Rustapp开发定制变量的概念开始讲起,同时搭配编程案例,辅以作业,帮助大家学习和理解Rust的变量基础概念。


一、定义变量

Rust定义变量需要使用关键词let,这点和Javascript是一致的,如果你有JS开发的经验,那你应该很熟悉。现在我们定义几个变量

  1. let x = 5;
  2. let y = 5.0;
  3. let str = String::from("Hello");

以上的几个变量都是没有问题的,定义了三个变量,x是整数型的,y是浮点型的,z是字符串型的。除此以外,Rust还支持指定变量类型来定义变量

  1. let x: i32 = 5;
  2. let y: f64 = 5.0;
  3. let str: String = String::from("Hello");

其实我们并不是一定得指定类型,因为Rust可以自动推断你使用的是哪种类型。 

二、Rust变量的可变性

在Rust中,变量默认是不可变的。如果你写了如下代码,就会报错

  1. fn main() {
  2. let x = 5;
  3. println!("The value of x is: {x}");
  4. x = 6;
  5. println!("The value of x is: {x}");
  6. }

报错如下

现在我们分析一下这个报错,首先看红色的报错,翻译过来的意思是,不可变的变量不可以赋值两次。意思就是不可变的变量不能再次赋值。

然后我们看蓝色的部分,第一次给x分配值,帮助:考虑使x变得可变,`mut x`。可以看出,蓝色的部分是帮助我们修改这个错误的,这也是Rust比较强大的地方之一。按照这个提示,我们应该这么改,

  1. let mut x: i32 = 5;
  2. print!("The value of x is: {}", x);
  3. x = 6;
  4. print!("The value of x is: {}", x);

 此时我们继续运行看看,

因此我们得出结论,Rust的变量默认是不可变的,只有添加mut关键字以后才会变得可变。 

三、Rust基本数据类型

1.数值类型

数值类型又分为整数型、浮点数、序列类型

整型

长度有符号无符号
8-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize

其中,每个长度都有有符号和无符号两种,有符号表示这个数分正数和负数,无符号则表示这个数据类型只有正数。

有符号的整型取值范围是

 其中n是长度。

另外,isize 和 usize 类型依赖运行程序的计算机架构:64 位架构上它们是 64 位的, 32 位架构上它们是 32 位的。

同时也支持用不同的形式表示不同进制的字面量。

数字字面值例子
Decimal (十进制)98_222
Hex (十六进制)0xff
Octal (八进制)0o77
Binary (二进制)0b1111_0000
Byte (单字节字符)(仅限于u8)b'A'

浮点型

Rust 也有两个原生的 浮点数 类型,它们是带小数点的数字。Rust 的浮点数类型是 f32 和 f64,分别占 32 位和 64 位。浮点数采用 IEEE-754 标准表示。f32 是单精度浮点数,f64 是双精度浮点数。默认类型是 f64,因为在现代 CPU 中,它与 f32 速度几乎一样,不过精度更高。所有的浮点型都是有符号的。以下是使用浮点型的实例。

  1. fn main() {
  2. let x = 2.0; // f64
  3. let y: f32 = 3.0; // f32
  4. }

2.字符类型

和C语言一样,char也是Rust的原生类型。但是与之不同的是,Rust的char类型是Unicode的,支持更多的字符,以下是使用字符类型的例子,(如果你能复制到梵文,连梵文也能编码了。)

  1. fn main() {
  2. let c = 'z';
  3. let z: char = 'ℤ'; // 指定变量类型
  4. let heart_eyed_cat = '😻';
  5. }

要注意分清楚字符和字符串,字符使用的是单引号,字符串使用的是双引号。 

3.布尔类型

Rust 中的布尔类型有两个可能的值:true 和 false。Rust 中的布尔类型使用 bool 表示。例如:

  1. fn main() {
  2. let t = true;
  3. let f: bool = false; // 指定变量类型
  4. }

四、复合类型

复合类型可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)。

元组

元组是一个将多个其他类型的值组合进一个复合类型的主要方式。可以将多个不同类型的值进行复合,但是元组长度固定:一旦声明,其长度不会增大或缩小。

  1. fn main() {
  2. let tup1 = (500, 6.4, 1);
  3. let tup2: (i32, f64, u8) = (500, 6.4, 1); // 指定类型
  4. }

同时元组也支持解构操作 

  1. fn main() {
  2. let tup = (500, 6.4, 1);
  3. let (x, y, z) = tup;
  4. println!("y的值是: {y}");
  5. }

访问元组的值是使用元素在元组中的索引来访问的,索引是从0开始的,与数组是一样的

  1. fn main() {
  2. let x: (i32, f64, u8) = (500, 6.4, 1);
  3. let x1 = x.0;
  4. let x2 = x.1;
  5. let x3 = x.2;
  6. }

数组

与元组不同,数组中的每个元素的类型必须相同。Rust 中的数组与一些其他语言中的数组不同,Rust中的数组长度是固定的。使用方式如下

  1. fn main() {
  2. let a = [1, 2, 3, 4, 5];
  3. let months = ["January", "February", "March", "April", "May", "June", "July",
  4. "August", "September", "October", "November", "December"];
  5. }

同时也可以指定元素类型

let a: [i32; 5] = [1, 2, 3, 4, 5];

如果初始化数组里面的值都是一样的,那么就有种简便的写法,如下,创建了一个数组a,其中有5个元素,这五个元素都是整数型3

let a = [3; 5];

 访问数组中的元素也是同其他编程语言一样

  1. fn main() {
  2. let a = [1, 2, 3, 4, 5];
  3. let a1 = a[0];
  4. let a2 = a[1];
  5. }

但是要注意,不要尝试越界访问数组元素,也就是说,要访问数组长度内的元素。 

五、常量

常量与不可变量是类似的,但是是不同的。常量(constants) 是绑定到一个名称的不允许改变的值。

  • 不可变量是默认不可变
  • 常量是总是不能变
  • 常量可以在任何作用域中声明
  • 常量只能被设置为常量表达式,而不可以是其他任何只能在运行时计算出的值

申明一个常量要用const

  1. fn main() {
  2. const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
  3. }

总结

以上就是本期所要讲述的内容了。本期主要讲了

  • 变量的定义
  • 变量的可变性
  • 基本变量类型
    • 整型
    • 布尔型
    • 字符型
  • 复合型
    • 数组
    • 元组
  • 常量

虽然很努力的组织内容了,但还是感觉不是很合理,在后期一定要调整,方便新手入门,让更多人能够学到Rust。

作业

完成以下作业是你学好rust的重要组成部分。以下题目摘自《Rust练习实践》

变量只有初始化了才可以使用

  1. // 修复下面代码的错误并尽可能少的修改
  2. fn main() {
  3. let x: i32; // 未初始化,但被使用
  4. let y: i32; // 未初始化,也未被使用
  5. println!("x is equal to {}", x);
  6. }

使用 mut 将变量标记为可变

  1. // 完形填空,让代码编译
  2. fn main() {
  3. let __ = 1;
  4. __ += 2;
  5. println!("x = {}", x);
  6. }

变量解构

  1. // 修复下面代码的错误并尽可能少的修改
  2. fn main() {
  3. let (x, y) = (1, 2);
  4. x += 2;
  5. assert_eq!(x, 3);
  6. assert_eq!(y, 2);
  7. }

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发