rust 从入门到精通之变量和常量

变量和常量

随着软件系统安全的重要性与日俱增, rust这门集聚高并发, 安全, 适配云环境的编程语言在市场上得到了越来越高的认可和关注。但其复杂的机制使其难以学习。且其很多特性对于其他语言是全新的,这加剧了学习的困难程度。教程主要针对rust基础进行讲解, 虽然面向小白,但更推荐有 c/cppGo 语言等开发语言的开发人员进行学习。

rustGo 一样是支持自动判断变量类型的强类型语言

即: 其编译器可以自动判断变量类型, 但变量类型不能随意更改

1.声明

声明变量使用 let 关键字

rust 复制代码
// 声明整型变量
let a = 123;	// 编译器自动推断为 i32

let b :i32 = 123;    // 变量 a 等价于 变量b

2.可变变量

rust 中有一个很重要也很特别的机制, 即: 变量不可变, 这与 rust 语言的所有权机制有关, 因篇幅有限, 这里只暂时提一句

这个机制在其他语言是没有的, 且看起来很奇怪, 但稍微做过一些项目的开发者都知道,

对于一些变量, 只会赋值一次, 以供其他对象使用, 如: 数据库连接变量

这类变量只会声明一次, 供其他对象进行调用, 而不会进行二次修改

rust 在默认情况下对变量进行了保护, 若需使变量可变, 则需使用 mut 关键字声明

rust 复制代码
// 声明可变变量
let mut num :i64 = 1;
num = 2;
println!("num is {}", num);     // num is 2

3.重影

重影在 rust 中是一个很重要的机制, 其使一个变量可以被更改, 其与可变变量不同, 重影是直接将变量覆盖掉

区别:

  • 可变变量: 对变量重新赋值, 不能更改变量类型
  • 重影: 对变量进行覆盖, 可以同时更改变量数据类型和值
rust 复制代码
let mut y:i32 = 1;
let mut y:f32 = 3.1415926;	// 这里将 y 从整型改为了 浮点型
println!("y is {}",  y);    // y is 3.1415925

4.静态变量

静态变量使用 static 关键字声明

静态变量类似于其他语言中的全局变量, 不同的是, 全局变量需声明在函数之外, 但 rust 中的静态变量既可以声明在函数外, 也可以声明在函数内部

注意:

  1. 静态变量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样
  2. 静态变量变量在初始化时, 必须指明其数据类型, 及其初始值
  3. 在 unsafe(不安全)代码块中, 可以搭配 mut 进行声明, 使静态变量可以进行修改

警告: static mutrust官方文档中提示 2027 年后将会被移除, 故不建议使用

rust 复制代码
static APP_VERSION1: f32 = 1.0;
fn main{
   	println!("app version1 is {}", APP_VERSION1);    // app version1 is 1.0
    static 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 关键字声明, 且与其他语言类似, 必须在定义时进行初始化, 指定其数据类型和值

常量与静态变量类似, 可以声明在函数外, 也可以声明在函数内部, 但常量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样, 且常量不存在可以重新赋值的情况

常量标识符 与 变量标识符 不同, 常量标识符必须使用大写字母, 且使用下划线进行单词分割

rust 复制代码
const CONST_NUM :i32 = 100;
println!("const is {}", CONST_NUM);    // const is 100