Rust 从 0 到 1- 基础概念 - 变量
" 比较看好 Rust 以后的发展,对 Rust 关注编程安全性的特性比较感兴趣,这个问题在软件变大变复杂以后就会变的比较突出。准备先从官网英文文档开始,因此开始部分内容主要来源于官方文档,但并不是完全的翻译。环境搭建和安装就不说了,这是程序猿必备的动手能力。"
变量默认为不可变
不同于目前主流的语言,Rust 变量默认是不可改变的,类似 Java 中声明为 final 的变量,当然你也可以通过增加 mut 关键字修饰声明为可变变量,这种做法可以减少意外的发生,特别是软件变复杂以后(人员变多、代码变多、并发等)。这种主动声明变量可变的方式,相当于每次提醒你一下,这个变量的值后面可能会被改变哦。而且如果你犯了错,对一个不可变变量赋值,在编译的时候就会提醒你。Rust 声明变量的关键字是 let。参见下面的例子:
除了安全性因素考虑之外,还有其它的一些考虑因素,譬如性能因素,这个就需要权衡了,在数据结构比较大的情况下,如果需要进行修改,就需要创建新的实例,也就是需要复制并分配新的存储空间,带来的性能影响可能就会比较大,这时候我们就需要考虑是否需要为了更好的性能而使用可变变量。譬如,Spring 的 Bean 默认就是单例的,避免了反复创建新的实例,但是在多线程环境下使用的时候就要特别注意,如果处理逻辑中有对单例状态的修改,则需要考虑线程同步问题。
和常量的区别
我认为概念上的主要区别在于,一般常量我们用于需要多次使用到的固定值,这样以后如果需要修改,我们只需要在一个地方进行维护。它是一个事先确定的值,不能用于方法或函数的返回值,即不能在运行时获得。其它的诸如必须要声明类型、不能声明为可变等,我认为主要是语法的区别。
影子特性
这个是 Rust 语法的一个特点,我理解为可以重复声明同一个名称的变量,后面声明的变量会覆盖前面的变量,分配的内存地址也不同。甚至后面的变量的类型也可以不同,这个与 mut 不同,mut 变量的类型无法再改变。参见下面的例子:
留个思考,如果开始声明是可变变量,后面声明为不可变变量会怎样?反过来又怎样?下面的例子又会怎样?
版权声明: 本文为 InfoQ 作者【山】的原创文章。
原文链接:【http://xie.infoq.cn/article/3bbce98ddd6c095a4e59899b8】。文章转载请联系作者。
评论