Rust作者认为变量默认应该是immutable,即声明后不能被改动的变量。这一点是让跨言语学习者觉得很别扭,不过这一点小的改动带来了诸多长处,本节咱们来学习Rust的变量。

什么是变量?

假如你初度学习编程言语,变量会是一个比较笼统的概念。 以Rust言语来说,声明一个变量便是请求一块内存,内存的巨细由变量的类型决议,类型咱们会在后边的课程介绍。

let a = "abc";

咱们运用let关键字声明一个变量a,一起把abc存放到变量里边。 此时,咱们能够说变量中存储了abc,也能够说这块内存中存储了abc

详细怎么来了解呢?

【Rust精华小册】3. Rust中不行变变量与const有何差异?

内存就像这个鸡蛋收纳盒, 咱们为每一个蛋格编码(这个编码就相当于内存地址)。声明一个变量a,相当于找到一个空格把它叫做a,一起把鸡蛋放到这个空格里边。咱们能够把任何一个空格叫做a,它不过是为蛋格的编码起了一个别号。

下面这个图就描绘了咱们这段代码实践做的工作,把0xBA0F0140到0xBA0F0152这段内存叫做变量a,而且存储了字符串abc

【Rust精华小册】3. Rust中不行变变量与const有何差异?

let a = "abc";
a = "efg"; // X 此处报错

咱们把在声明变量a时赋值了“abc”,就不能再修正这个变量了。这是Rust的一个言语特性,假如咱们后续可能会修正变量a的内容,就需求在声明时添加上mut关键字,如下:

let mut a = "abc";
a = "efg"; // √

Rust引进mut关键字的有何优势?

  1. 不行变变量能够避免意外修正,然后避免数据竞争和内存过错。例如,假如一个变量是不行变的,则无法在多个线程中一起修正它,然后避免数据竞争。
  2. 不行变变量能够使代码愈加简洁易读。例如,假如一个变量是不行变的,则能够明确地表明该变量的值在代码块内不会改动,然后使代码的逻辑愈加清晰。
  3. 不行变变量能够协助编译器进行优化。例如,假如一个变量是不行变的,则编译器能够知道该变量的值在代码块内不会改动,然后能够进行一些优化,例如消除不必要的计算。
  4. 不行变变量是函数式编程的重要概念。函数式编程鼓励运用不行变变量和纯函数,然后使代码愈加易于了解和测验。

Rust中不行变变量与const有何差异?

const MAX_SIZE: usize = 100;

const 关键字用于定义常量。常量与不行变变量类似,但常量在编译期就确认了值,不能在运行时改动。不行变变量直到运行期来能确认下来。

常量具有以下长处:

  • 性能:常量能够协助编译器进行优化。
  • 可读性:常量能够使代码愈加易读。

如何毁掉一个变量?

声明变量对应着请求内存,毁掉变量也便是开释对应的内存。

Rust中开释内存有非常复杂的机制,主要分为两类:

  1. 开释栈内存,脱离效果域即使放效果域内的变量。
  2. 开释堆内存,通常便是由智能指针来开释内存。也是模仿栈内存的开释形式,即在脱离效果域时判断是否需求开释内存。

内存的开释是Rust的核心内容,涉及到所有权、借用、和生命周期以及智能指针。这些也是Rust的难点,劝退了众多想尝试Rust的开发者。后边咱们会详细介绍这一部分。不过接下来咱们需求先衬托Rust根底内容,以后再探秘这些难点。

总结:

  • let关键字用于声明变量,此外它还用于形式匹配
  • mut关键字用于声明可变变量。
  • const关键字用于声明常量。

更多关键词能够检查: doc.rust-lang.org/reference/k… 随着课程的打开咱们会一一介绍这些关键词,不需求刻意回忆,运用的多了,就会形成肌肉回忆了。