作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
郵箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/130875912
【介紹】:本文介紹 Rust 語言中的常量與變量。
1. 概述:常量與變量的概念
這一小節(jié)主要是為方便剛剛學(xué)編程的小白讀者準備的。在計算機編程中常量和變量都是用于存儲數(shù)據(jù)的標識符,它們用于表示在程序執(zhí)行過程中可能發(fā)生變化的值。常量和變量的區(qū)別在于它們的賦值后的行為:即是否可以再改變。
1.1 常量 的概念
常量 是一個在程序執(zhí)行期間值不會改變的標識符。常量通常用于表示在程序中固定不變的值,如數(shù)學(xué)常數(shù)、配置參數(shù)等。一旦常量被賦值,就無法再修改其值。
1.2 變量 的概念
變量 是一個在程序執(zhí)行期間其值可以改變的標識符。變量通常用于表示在程序中需要存儲、修改或計算的值。變量的值可以在程序的不同位置進行修改,允許根據(jù)需要動態(tài)調(diào)整存儲的數(shù)據(jù)。
2. Rust 中的常量
2.1 定義常量
在 Rust 中,常量使用 const 關(guān)鍵字進行定義。常量的值在編譯時就確定,并且不允許在程序執(zhí)行期間更改。在 Rust 中定義的常量在 整個程序的作用域內(nèi) 都有效。例如:
const MAX_COUNT: u32 = 100_000;
上面的這個常量的命名是遵循 Rust 語言常量命名規(guī)范的命名方式。
在 Rust 語言中,常量的命名規(guī)范通常使用全大寫字母,單詞之間使用 下劃線 (_
) 進行分隔,這與 Python 語言中命名一個不在代碼中改變的量的規(guī)范很像。不過 Python 中并沒有真正意義上的常量,這個“不會改變”只存在與編程者頭腦的契約中,而如果對 Rsut 中的常量進行修改,是回導(dǎo)致異常的。
2.2 Rsut 中常量的若干規(guī)則
常量的 類型 必須在 聲明 時就明確指定,并且常量的值必須是一個編譯時常量(在編譯時可以確定其值)。這意味著不能將函數(shù)調(diào)用的結(jié)果或運行時計算的值賦給常量。
常量在 Rust 中的使用方式與變量類似,可以在表達式中使用常量,傳遞給函數(shù),作為模式匹配的一部分等。
3. Rust 中的變量
3.1 定義變量
在 Rust 中,變量使用 let
關(guān)鍵字進行定義。變量的值可以根據(jù)需要在程序執(zhí)行過程中進行修改。例如:
fn main() {
let name = "Jack Lee";
let age: u32 = 27;
println!("姓名: {}", name);
println!("年齡: {}", age);
}
輸出結(jié)果為:
姓名: Jack Lee
年齡: 27
3.2 “不可變”的變量
3.2.1 違背常理的變量
你覺得你定義的變量可以修改嗎?
看到本小節(jié)以這樣的方式開頭可能回讓你有點以外——嗯,甚至有點 不安 和 疑惑:
既然是變量,那還問什么是否可以修改嗎。想到這里,你不妨試試修改并運行一下你的代碼:
fn main() {
let name = "Jack Lee";
let age: u32 = 27;
age = age-1;
println!("姓名: {}", name);
println!("年齡: {}", age);
}
似乎有情況發(fā)生了,你看到的是下面這樣的報錯:
error[E0384]: cannot assign twice to immutable variable `age`
--> src\main.rs:5:5
|
3 | let age: u32 = 27;
| ---
| |
| first assignment to `age`
| help: consider making this binding mutable: `mut age`
4 |
5 | age = age-1;
| ^^^^^^^^^^^ cannot assign twice to immutable variable
For more information about this error, try `rustc --explain E0384`.
error: could not compile `use-reg` due to previous error
依據(jù)提示你可以查詢一下 E0384:
rustc --explain E0384
你會看到:
An immutable variable was reassigned.
Erroneous code example:
fn main() {
let x = 3;
x = 5; // error, reassignment of immutable variable
}
By default, variables in Rust are immutable. To fix this error, add the keyword
`mut` after the keyword `let` when declaring the variable. For example:
fn main() {
let mut x = 3;
x = 5;
}
上面清楚地告訴你:
一個不可變變量被重新分配!
(An immutable variable was reassigned.)
3.2.2 不可變背后的考慮
是的!——雖然被叫做變量。但是默認情況下,Rust中的變量是不可變的。為什么 Rust 要設(shè)計出這種違背常理的邏輯呢?
實際上將變量聲明為不可變的,其目的在于 提供更強的安全性和防止?jié)撛诘腻e誤。這種設(shè)計選擇是 Rust 語言為了避免一類常見的編程錯誤,即 數(shù)據(jù)競爭(data races)。
關(guān)于 數(shù)據(jù)競爭 的概念
數(shù)據(jù)競爭 是指 多個線程 同時訪問 共享數(shù)據(jù),并且至少有一個線程試圖寫入該數(shù)據(jù)的情況。在并發(fā)編程中,數(shù)據(jù)競爭是非常危險的,因為它會導(dǎo)致不確定的行為、不可預(yù)測的結(jié)果以及安全漏洞。
不可變的其它優(yōu)勢
此外,Rust 語言中將變量默認為不可變還有以下優(yōu)勢:
-
易于推理:
不可變變量可以幫助程序員更容易地跟蹤變量的狀態(tài)和使用。由于不可變變量的值在綁定后不會發(fā)生改變,可以更加自信地推理代碼的行為。 -
預(yù)防錯誤:
Rust 通過將變量默認聲明為不可變的,鼓勵程序員在編寫代碼時更加謹慎地處理數(shù)據(jù)共享和并發(fā)訪問。當變量是不可變的時候,編譯器可以進行更多的靜態(tài)分析和優(yōu)化,以確保并發(fā)訪問的安全性。在編譯時,Rust 編譯器會檢查對不可變變量的修改嘗試,并在發(fā)現(xiàn)錯誤時發(fā)出錯誤信息。這可以幫助早期發(fā)現(xiàn)潛在的錯誤,減少調(diào)試和維護的難度。 -
提高可讀性:
通過將變量聲明為不可變的,代碼的意圖更加清晰明了。其他開發(fā)人員可以更容易地理解和維護你的代碼,減少潛在的錯誤。
3.3 可變變量 與 mut 關(guān)鍵字
既然我們定義變量,那么就希望能夠在某些時候改變它們。如果變量完完全全不可變,那就只需要常量好了。因此 Rust 也提供了 mut
關(guān)鍵字,使我們能夠 顯式地 將一個變量聲明為 可變變量 以滿足 修改數(shù)據(jù) 的需求。我們通過將 mut
關(guān)鍵字 放在變量名之前,可以指示編譯器允許對該變量進行修改,例如,我們之前地例子中由于對不可變變量 age
做了修改導(dǎo)致于程序報錯,現(xiàn)在只需為變量 age
加上 mute
關(guān)鍵字就能讓程序正常運行:
fn main() {
let name = "Jack Lee";
let mut age: u32 = 27;
age = age-1;
println!("姓名: {}", name);
println!("年齡: {}", age);
}
其輸出結(jié)果為:文章來源:http://www.zghlxwxcb.cn/news/detail-462702.html
姓名: Jack Lee
年齡: 26
這個例子表名,本文作者 Jack Lee 由于生活很開心,越活越年輕,又年輕了一歲??。文章來源地址http://www.zghlxwxcb.cn/news/detail-462702.html
到了這里,關(guān)于Rust 筆記:Rust 語言中的常量與變量的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!