成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起聊聊 Rust 變量,你學(xué)會了嗎?

開發(fā) 前端
Rust 默認(rèn)支持類型推導(dǎo),在編譯器能夠推導(dǎo)類型的情況下,變量類型一般可以省略,但常量(const)和靜態(tài)變量(static)必須聲明類型。

Rust 是一門強(qiáng)調(diào)安全、并發(fā)、高效的系統(tǒng)編程語言。無 GC 實(shí)現(xiàn)內(nèi)存安全機(jī)制、無數(shù)據(jù)競爭的并發(fā)機(jī)制、無運(yùn)行時開銷的抽象機(jī)制,是 Rust 獨(dú)特的優(yōu)越特性。 它聲稱解決了傳統(tǒng) C 語言和 C++語言幾十年來飽受責(zé)難的內(nèi)存安全問題,同時還保持了很高的運(yùn)行效率、很深的底層控制、很廣的應(yīng)用范圍, 在系統(tǒng)編程領(lǐng)域具有強(qiáng)勁的競爭力和廣闊的應(yīng)用前景。

在 Rust 筆記(三)中,講了復(fù)核類型,本文就認(rèn)識一下 Rust 中的變量。

可變 & 不可變

Rust 默認(rèn)支持類型推導(dǎo),在編譯器能夠推導(dǎo)類型的情況下,變量類型一般可以省略,但常量(const)和靜態(tài)變量(static)必須聲明類型。

圖片圖片

let a: &str = "一個不可變變量";
const B: &str = "一個常量";
static C: &str = "一個靜態(tài)變量";

變量默認(rèn)是不可變的。如果需要讓變量具有可變性,必須為變量添加 mut 關(guān)鍵字。默認(rèn)變量不可變是一個很重要的特性,它符合最小權(quán)限原則(Principle of Least Privilege),有助于我們寫出健壯且正確的代碼。當(dāng)你使用 mut 卻沒有修改變量,Rust 編譯期會友好地報(bào)警,提示你移除不必要的 mut。

let mut x = 10; // 聲明一個可變的整型變量
x = 20; // 可以修改 x 的值

當(dāng)使用 mut 關(guān)鍵字聲明一個引用時,該引用就可以被修改所指向的變量,例如:

let mut s = String::from("hello");
let r = &mut s; // 聲明一個可變的字符串引用
r.push_str(" world!"); // 可以修改 s 的值

在其他大多數(shù)語言中,要么只支持申明可變的變量,要么只支持申明不可變的變量,但是 Rust 就不一樣了,兩者我都要,既要靈活性又要安全性。還有一個很大的優(yōu)點(diǎn),那就是運(yùn)行性能上的提升,因?yàn)閷⒈旧頍o需改變的變量聲明為不可變在運(yùn)行期會避免一些多余的 runtime 檢查。

選擇可變還是不可變,更多的還是取決于你的使用場景,

  • 不可變: 有安全性,但是喪失了靈活性和性能
  • 可變變量:最大的好處就是使用上的靈活性和性能上的提升

使用下劃線開頭忽略未使用的變量

在 Rust 中創(chuàng)建了一個變量卻不在任何地方使用它,Rust 會給你一個警告,因?yàn)檫@可能會是個 BUG。

圖片圖片

但是有時創(chuàng)建一個不會被使用的變量是有用的,比如你正在設(shè)計(jì)原型或剛剛開始一個項(xiàng)目。這時你希望告訴 Rust 不要警告未使用的變量,為此可以用下劃線作為變量名的開頭:

圖片圖片

變量綁定

在其他語言中,比如 JS,我們使用 var a = "Hello World"。意思是將 "Hello World" 賦值給變量 a。在 Rust 中,let a = "Hello World",意思和 JS 中一樣,但是這個過程起了有一個名字:變量綁定。

其實(shí)本質(zhì)上是一回事,賦值 === 綁定,但是 Rust 存在“所有權(quán)”這一特性,所以綁定的含義更清晰準(zhǔn)確。綁定就是把這個對象綁定給一個變量,讓這個變量成為它的主人。

變量解構(gòu) & 解構(gòu)賦值

let 表達(dá)式不僅僅用于變量的綁定,還能進(jìn)行復(fù)雜變量的解構(gòu):從一個相對復(fù)雜的變量中,匹配出該變量的一部分內(nèi)容:

let (a, mut b): (bool, bool) = (true, false);
// a = true,不可變; b = false,可變
println!("a = {:?}, b = {:?}", a, b);

也可以進(jìn)行變量的解構(gòu)賦值:

let (a, b, c, d, e);
(a, b) = (1, 2);

變量遮蔽

Rust 允許對申明的變量再次聲明,也就是允許申明相同的變量,后面的變量就會遮蔽前端的變量。

let x: i32 = 1;
let x: i32 = 2;
let x: i32 = x +1;
println!("x: {}", x);

這和 mut 變量的使用是不同的,第二個 let 生成了完全不同的新變量,兩個變量只是恰好擁有同樣的名稱,涉及一次內(nèi)存對象的再分配 ,而 mut 聲明的變量,可以修改同一個內(nèi)存地址上的值,并不會發(fā)生內(nèi)存對象的再分配,性能要更好。

變量命名

在命名方面,和其它語言沒有區(qū)別,不過當(dāng)給變量命名時,需要遵循 Rust 命名規(guī)范。詳情可看RFC 430

  • type-level 的構(gòu)造 Rust 傾向于使用駝峰命名法,value-level 的構(gòu)造使用蛇形命名法。
  • 特殊命名:名稱應(yīng)該使用動詞,而不是形容詞或者名詞。
  • 類型轉(zhuǎn)換要遵守 as_,to_,into_ 命名慣例(C-CONV)。
  • 讀訪問器(Getter)的名稱遵循 Rust 的命名規(guī)范(C-GETTER)。
  • 一個集合上的方法,如果返回迭代器,需遵循命名規(guī)則:iter,iter_mut,into_iter (C-ITER)。
  • 迭代器的類型應(yīng)該與產(chǎn)生它的方法名相匹配(C-ITER-TY)。
  • Cargo Feature 的名稱不應(yīng)該包含占位詞(C-FEATURE)。
  • 命名要使用一致性的詞序(C-WORD-ORDER)

變量和常量之間的差異

有變量就有常量。常量也是綁定到一個常量名且不允許更改的值,但是常量和變量之間存在一些差異:

  • 常量不允許使用 mut。常量不僅僅默認(rèn)不可變,而且自始至終不可變,因?yàn)槌A吭诰幾g完成后,已經(jīng)確定它的值。
  • 常量使用 const 關(guān)鍵字而不是 let 關(guān)鍵字來聲明,并且值的類型必須標(biāo)注。
let a: &str = "一個不可變變量";
const B: &str = "一個常量";

常量可以在任意作用域內(nèi)聲明(包括全局作用域),在聲明的作用域內(nèi),常量在運(yùn)行的整個過程中都有效。對于需要在多處代碼共享一個不可變的值時非常有用。

參考

責(zé)任編輯:武曉燕 來源: 不愛吃貓的魚er
相關(guān)推薦

2023-11-13 18:36:04

知識抽取NER

2023-06-07 14:07:00

架構(gòu)

2023-04-13 08:40:12

MySQL服務(wù)器SELECT

2025-01-06 09:26:49

2023-01-03 08:13:26

GoModulesMaven

2022-06-15 08:00:50

磁盤RedisRocketMQ

2021-12-14 09:34:31

丑數(shù)順序指針

2021-05-31 09:23:04

管道模式責(zé)任鏈

2024-04-29 06:55:34

RustMIDI應(yīng)用程序

2024-10-17 10:00:59

2023-10-10 11:04:11

Rust難點(diǎn)內(nèi)存

2024-09-13 09:05:31

架構(gòu)思維程序

2024-09-11 08:02:27

k8sgitlab升級

2023-07-10 08:36:21

工具pptword

2023-01-29 08:08:34

并發(fā)庫conc通用庫

2024-06-12 08:36:25

2024-03-05 10:09:16

restfulHTTPAPI

2022-12-26 07:48:04

敏捷項(xiàng)目

2022-04-01 08:48:45

JavaPythonRuby

2023-03-07 07:50:15

Transactio事務(wù)代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91传媒在线观看 | 欧美精三区欧美精三区 | 天堂在线免费视频 | 国产精品亚洲第一 | 日本成人区 | 91亚洲国产 | 激情婷婷成人 | 99精品在线| 午夜国产| 亚洲精品国产精品国自产在线 | 午夜精品久久久 | 亚洲一区在线播放 | 国产欧美精品在线 | 亚洲精品免费视频 | 国产精品久久久久久久久久免费看 | 国产精品视频一区二区三区四区国 | 欧美日韩精品中文字幕 | 成人午夜网站 | 日日骚av | 成人精品福利 | 成人免费小视频 | 久草.com| 欧美一区二区三区久久精品 | h片在线播放 | 日韩一区二区在线视频 | 久久蜜桃av一区二区天堂 | 国产视频精品区 | 亚州视频在线 | 97精品国产97久久久久久免费 | 免费成人在线网站 | 视频在线观看亚洲 | www.中文字幕| 一级黄色片在线免费观看 | 国产精品色婷婷久久58 | 亚洲福利一区二区 | 亚洲三区视频 | 国产情品 | 亚洲在线高清 | 国产精品一区二区av | 日韩喷潮 | 久久久蜜臀国产一区二区 |