變量和常量
隨著軟件系統安全的重要性與日俱增, 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