写点什么

Rust 从 0 到 1- 基础概念 - 变量

用户头像
关注
发布于: 2021 年 03 月 23 日
Rust从0到1-基础概念-变量

" 比较看好 Rust 以后的发展,对 Rust 关注编程安全性的特性比较感兴趣,这个问题在软件变大变复杂以后就会变的比较突出。准备先从官网英文文档开始,因此开始部分内容主要来源于官方文档,但并不是完全的翻译。环境搭建和安装就不说了,这是程序猿必备的动手能力。"

变量默认为不可变


    不同于目前主流的语言,Rust 变量默认是不可改变的,类似 Java 中声明为 final 的变量,当然你也可以通过增加 mut 关键字修饰声明为可变变量,这种做法可以减少意外的发生,特别是软件变复杂以后(人员变多、代码变多、并发等)。这种主动声明变量可变的方式,相当于每次提醒你一下,这个变量的值后面可能会被改变哦。而且如果你犯了错,对一个不可变变量赋值,在编译的时候就会提醒你。Rust 声明变量的关键字是 let。参见下面的例子:

fn main() {    	let word = "hello";	println!("The value of word is: {}", word);	word = "bye";	println!("The value of word is: {}", word);}
复制代码

除了安全性因素考虑之外,还有其它的一些考虑因素,譬如性能因素,这个就需要权衡了,在数据结构比较大的情况下,如果需要进行修改,就需要创建新的实例,也就是需要复制并分配新的存储空间,带来的性能影响可能就会比较大,这时候我们就需要考虑是否需要为了更好的性能而使用可变变量。譬如,Spring 的 Bean 默认就是单例的,避免了反复创建新的实例,但是在多线程环境下使用的时候就要特别注意,如果处理逻辑中有对单例状态的修改,则需要考虑线程同步问题。

和常量的区别


我认为概念上的主要区别在于,一般常量我们用于需要多次使用到的固定值,这样以后如果需要修改,我们只需要在一个地方进行维护。它是一个事先确定的值,不能用于方法或函数的返回值,即不能在运行时获得。其它的诸如必须要声明类型、不能声明为可变等,我认为主要是语法的区别。

影子特性


这个是 Rust 语法的一个特点,我理解为可以重复声明同一个名称的变量,后面声明的变量会覆盖前面的变量,分配的内存地址也不同。甚至后面的变量的类型也可以不同,这个与 mut 不同,mut 变量的类型无法再改变。参见下面的例子:


let spaces = "   ";let spaces = spaces.len();println!("The value of spaces is: {}", spaces);let mut spaces = "   ";spaces = spaces.len();println!("The value of spaces is: {}", spaces);
复制代码

留个思考,如果开始声明是可变变量,后面声明为不可变变量会怎样?反过来又怎样?下面的例子又会怎样?

let v = Vec::new();let mut v = v;v.push("hi");let mut v = Vec::new();let v = v;v.push("hi");
复制代码


发布于: 2021 年 03 月 23 日阅读数: 12
用户头像

关注

还未添加个人签名 2021.03.23 加入

还未添加个人简介

评论

发布
暂无评论
Rust从0到1-基础概念-变量