rust 从入门到精通之变量和常量
变量和常量
随着软件系统安全的重要性与日俱增, rust
这门集聚高并发, 安全, 适配云环境的编程语言在市场上得到了越来越高的认可和关注。但其复杂的机制使其难以学习。且其很多特性对于其他语言是全新的,这加剧了学习的困难程度。教程主要针对rust
基础进行讲解, 虽然面向小白,但更推荐有 c/cpp
和 Go
语言等开发语言的开发人员进行学习。
rust
和 Go
一样是支持自动判断变量类型的强类型语言
即: 其编译器可以自动判断变量类型, 但变量类型不能随意更改
1.声明
声明变量使用 let 关键字
// 声明整型变量
let a = 123; // 编译器自动推断为 i32let b :i32 = 123; // 变量 a 等价于 变量b
2.可变变量
在 rust
中有一个很重要也很特别的机制, 即: 变量不可变, 这与 rust
语言的所有权机制有关, 因篇幅有限, 这里只暂时提一句
这个机制在其他语言是没有的, 且看起来很奇怪, 但稍微做过一些项目的开发者都知道,
对于一些变量, 只会赋值一次, 以供其他对象使用, 如: 数据库连接变量
这类变量只会声明一次, 供其他对象进行调用, 而不会进行二次修改
故 rust
在默认情况下对变量进行了保护, 若需使变量可变, 则需使用 mut
关键字声明
// 声明可变变量
let mut num :i64 = 1;
num = 2;
println!("num is {}", num); // num is 2
3.重影
重影在 rust 中是一个很重要的机制, 其使一个变量可以被更改, 其与可变变量不同, 重影是直接将变量覆盖掉
区别:
- 可变变量: 对变量重新赋值, 不能更改变量类型
- 重影: 对变量进行覆盖, 可以同时更改变量数据类型和值
let mut y:i32 = 1;
let mut y:f32 = 3.1415926; // 这里将 y 从整型改为了 浮点型
println!("y is {}", y); // y is 3.1415925
4.静态变量
静态变量使用 static
关键字声明
静态变量类似于其他语言中的全局变量, 不同的是, 全局变量需声明在函数之外, 但 rust
中的静态变量既可以声明在函数外, 也可以声明在函数内部
注意:
- 静态变量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样
- 静态变量变量在初始化时, 必须指明其数据类型, 及其初始值
- 在 unsafe(不安全)代码块中, 可以搭配
mut
进行声明, 使静态变量可以进行修改
警告:
static mut
在rust
官方文档中提示 2027 年后将会被移除, 故不建议使用
static APP_VERSION1: f32 = 1.0;
fn main{println!("app version1 is {}", APP_VERSION1); // app version1 is 1.0static APP_VERSION2 :f32 = 1.1;println!("app version2 is {}", APP_VERSION2); // app version2 is 1.1// 声明可变的静态变量unsafe {static mut APP_VERSION3 :f32 = 1.2;APP_VERSION3 = 1.3;let value = APP_VERSION3;println!("app version3 is {}", value); // app version3 is 1.3}
}
5.常量
rust
中的常量使用 const
关键字声明, 且与其他语言类似, 必须在定义时进行初始化, 指定其数据类型和值
常量与静态变量类似, 可以声明在函数外, 也可以声明在函数内部, 但常量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样, 且常量不存在可以重新赋值的情况
常量标识符 与 变量标识符 不同, 常量标识符必须使用大写字母, 且使用下划线进行单词分割
const CONST_NUM :i32 = 100;
println!("const is {}", CONST_NUM); // const is 100