Rust 笔记:Rust 语言中的常量与变量

这篇具有很好参考价值的文章主要介绍了Rust 笔记:Rust 语言中的常量与变量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Rust 笔记
Rust 语言中的常量与变量

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/130875912


【介绍】:本文介绍 Rust 语言中的常量与变量。

上一节:《 上一节标题 | 下一节:《 Rust 语言中的的原始类型(Primitive Types)


1. 概述:常量与变量的概念

这一小节主要是为方便刚刚学编程的小白读者准备的。在计算机编程中常量和变量都是用于存储数据的标识符,它们用于表示在程序执行过程中可能发生变化的值。常量和变量的区别在于它们的赋值后的行为:即是否可以再改变。

1.1 常量 的概念

常量 是一个在程序执行期间值不会改变的标识符。常量通常用于表示在程序中固定不变的值,如数学常数、配置参数等。一旦常量被赋值,就无法再修改其值。

1.2 变量 的概念

变量 是一个在程序执行期间其值可以改变的标识符。变量通常用于表示在程序中需要存储、修改或计算的值。变量的值可以在程序的不同位置进行修改,允许根据需要动态调整存储的数据。

2. Rust 中的常量

2.1 定义常量

在 Rust 中,常量使用 const 关键字进行定义。常量的值在编译时就确定,并且不允许在程序执行期间更改。在 Rust 中定义的常量在 整个程序的作用域内 都有效。例如:

const MAX_COUNT: u32 = 100_000;

上面的这个常量的命名是遵循 Rust 语言常量命名规范的命名方式。
Rust 语言中,常量的命名规范通常使用全大写字母,单词之间使用 下划线_) 进行分隔,这与 Python 语言中命名一个不在代码中改变的量的规范很像。不过 Python 中并没有真正意义上的常量,这个“不会改变”只存在与编程者头脑的契约中,而如果对 Rsut 中的常量进行修改,是回导致异常的。

2.2 Rsut 中常量的若干规则

常量的 类型 必须在 声明 时就明确指定,并且常量的值必须是一个编译时常量(在编译时可以确定其值)。这意味着不能将函数调用的结果或运行时计算的值赋给常量

常量在 Rust 中的使用方式与变量类似,可以在表达式中使用常量,传递给函数,作为模式匹配的一部分等。

3. Rust 中的变量

3.1 定义变量

在 Rust 中,变量使用 let 关键字进行定义。变量的值可以根据需要在程序执行过程中进行修改。例如:

fn main() {
    let name = "Jack Lee";
    let age: u32 = 27;

    println!("姓名: {}", name);
    println!("年龄: {}", age);
}

输出结果为:

姓名: Jack Lee
年龄: 27

3.2 “不可变”的变量

3.2.1 违背常理的变量

你觉得你定义的变量可以修改吗?

看到本小节以这样的方式开头可能回让你有点以外——嗯,甚至有点 不安 和 疑惑:

既然是变量,那还问什么是否可以修改吗。想到这里,你不妨试试修改并运行一下你的代码:

fn main() {
    let name = "Jack Lee";
    let age: u32 = 27;

    age = age-1;

    println!("姓名: {}", name);
    println!("年龄: {}", age);
}

似乎有情况发生了,你看到的是下面这样的报错:

error[E0384]: cannot assign twice to immutable variable `age`
 --> src\main.rs:5:5
  |
3 |     let age: u32 = 27;
  |         ---
  |         |
  |         first assignment to `age`
  |         help: consider making this binding mutable: `mut age`
4 |
5 |     age = age-1;
  |     ^^^^^^^^^^^ cannot assign twice to immutable variable

For more information about this error, try `rustc --explain E0384`.
error: could not compile `use-reg` due to previous error

依据提示你可以查询一下 E0384:

rustc --explain E0384

你会看到:

An immutable variable was reassigned.

Erroneous code example:

fn main() {
    let x = 3;
    x = 5; // error, reassignment of immutable variable
}

By default, variables in Rust are immutable. To fix this error, add the keyword
`mut` after the keyword `let` when declaring the variable. For example:

fn main() {
    let mut x = 3;
    x = 5;
}

上面清楚地告诉你:

一个不可变变量被重新分配!
(An immutable variable was reassigned.)

3.2.2 不可变背后的考虑

是的!——虽然被叫做变量。但是默认情况下,Rust中的变量是不可变的。为什么 Rust 要设计出这种违背常理的逻辑呢?

实际上将变量声明为不可变的,其目的在于 提供更强的安全性和防止潜在的错误。这种设计选择是 Rust 语言为了避免一类常见的编程错误,即 数据竞争data races)。

关于 数据竞争 的概念

数据竞争 是指 多个线程 同时访问 共享数据,并且至少有一个线程试图写入该数据的情况。在并发编程中,数据竞争是非常危险的,因为它会导致不确定的行为、不可预测的结果以及安全漏洞。

不可变的其它优势

此外,Rust 语言中将变量默认为不可变还有以下优势:

  1. 易于推理
    不可变变量可以帮助程序员更容易地跟踪变量的状态和使用。由于不可变变量的值在绑定后不会发生改变,可以更加自信地推理代码的行为。

  2. 预防错误
    Rust 通过将变量默认声明为不可变的,鼓励程序员在编写代码时更加谨慎地处理数据共享和并发访问。当变量是不可变的时候,编译器可以进行更多的静态分析和优化,以确保并发访问的安全性。在编译时,Rust 编译器会检查对不可变变量的修改尝试,并在发现错误时发出错误信息。这可以帮助早期发现潜在的错误,减少调试和维护的难度。

  3. 提高可读性
    通过将变量声明为不可变的,代码的意图更加清晰明了。其他开发人员可以更容易地理解和维护你的代码,减少潜在的错误。

3.3 可变变量 与 mut 关键字

既然我们定义变量,那么就希望能够在某些时候改变它们。如果变量完完全全不可变,那就只需要常量好了。因此 Rust 也提供了 mut 关键字,使我们能够 显式地 将一个变量声明为 可变变量 以满足 修改数据 的需求。我们通过将 mut 关键字 放在变量名之前,可以指示编译器允许对该变量进行修改,例如,我们之前地例子中由于对不可变变量 age 做了修改导致于程序报错,现在只需为变量 age 加上 mute 关键字就能让程序正常运行:

fn main() {
    let name = "Jack Lee";
    let mut age: u32 = 27;

    age = age-1;

    println!("姓名: {}", name);
    println!("年龄: {}", age);
}

其输出结果为:

姓名: Jack Lee
年龄: 26

这个例子表名,本文作者 Jack Lee 由于生活很开心,越活越年轻,又年轻了一岁😊。文章来源地址https://www.toymoban.com/news/detail-462702.html

到了这里,关于Rust 笔记:Rust 语言中的常量与变量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GO语言的变量与常量

    go是一个静态语言 变量必须先定义后使用 变量必须要有类型 定义变量的方式: var 名称 类型 var 名称 =值 名称 :=值 例如: 这样就存了一个num类型为int的变量 上面使用简化的定义通过num自动判断后面的类型为int并赋值为1 第三种方式就是使用这种方式赋值 使用冒号加等于赋值

    2024年02月19日
    浏览(37)
  • Go语言基础之变量和常量

    标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123 是指编程语言中预先定义好的具有特殊含义的标识符。

    2024年02月12日
    浏览(42)
  • C语言初阶之常量和变量

    在C程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中, 直接常量是可以不经说明而直接引用的,而符

    2024年02月03日
    浏览(32)
  • 编程笔记 Golang基础 010 常量和变量

    在 Go 语言中,常量(Constant)是一个固定的值,在程序运行期间不可被修改。它们通常用来表示那些在整个程序执行过程中不会变化的数值或其他类型的数据。在 Go 语言中,变量是用来存储数据的容器。 在 Go 语言中,常量(Constant)是一个固定的值,在程序运行期间不可被

    2024年02月21日
    浏览(46)
  • C#学习笔记--变量、常量和转义字符

    变量是存储数值的容器,是一门程序语言的最基础的部分。 不同的变量类型可以存储不同类型的数值。 种类: 在C#种一共有14种变量: 有符号类型4种 无符号类型4种 浮点数3种 特殊类型(char bool string) 变量的命名规则 不能以数字开头 不能使用程序命名 不能有除下划线

    2024年02月08日
    浏览(49)
  • 【C】C语言数据类型、常量变量的介绍

    下图为C语言常见的数据类型: (浮点数就是我们常见的小数,字符类型要用‘’引起来,在C语言中字符串类型要用字符数组来表示,以后给大家慢慢介绍) 在C语言中没种数据类型所占的空间大小是不一样的,在这里给大家介绍一个库函数: sizeof ,它可以计算每种数据类型

    2024年02月09日
    浏览(60)
  • 【go语言】2.1.1 变量,常量和数据类型

    Go 语言中,变量是存储数据的基本单位,常量则是固定不变的数据。每个变量和常量都有其对应的数据类型。 在 Go 语言中,你可以使用  var  来声明一个变量: 上面的代码声明了一个名为  name  的变量,它的类型是  string 。你也可以在声明变量的同时给它赋值: 或

    2024年02月15日
    浏览(49)
  • C语言入门之变量、常量、字符串、转义字符

    文章目录 变量 常量 字符串 转义字符 1.变量的命名规则: 只能由字母(包括大写和小写)、数字和下划线( _ )组成。 不能以数字开头。 长度不能超过63个字符。 变量名中区分大小写的。 变量名不能使用。 2.变量的分类:         变量可以分为局部变量以及全局

    2023年04月19日
    浏览(61)
  • SCL语言的数据类型和常量与变量声明方式

    SCL语言的数据类型主要包含以下几类: 1. 基本数据类型: - BOOL:布尔类型,取值为TRUE或FALSE。 - INT:整数类型,取值范围为-32768~32767(16位PLC)或-2147483648~2147483647(32位PLC)。 - UINT:无符号整数类型,取值范围为0~65535(16位PLC)或0~4294967295(32位PLC)。 - REAL:单精度浮点数

    2024年02月09日
    浏览(48)
  • 【C语言基础考研向】02 数据类型-常量-变量

    文章目录: 一.数据类型 二.常量 三.变量 四. 整型数据 五.浮点型数据 六.字符型数据 七.字符串常量 数据类型分为四大类: 基本类型 整型 浮点 字符型 构造类型 数组 结构体 指针类型 空类型 常量是指在程序运行过程中,其值不发生变化的量。常量又可分为整型、实型(也称浮

    2024年01月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包