Rust 通用程式設計概念

2022-03-30 04:32:05 字數 2691 閱讀 1023

變數、基本型別、函式、控制流

rust中的變數預設是不可變的,這樣是為了能夠讓你安全並且方便地寫出複雜、甚至並行的**。

當乙個變數是不可變時,一旦它繫結到了某個值上面,這個值就再也無法被改變了。

1 let x = 5

;m,2 println!("

the value of x is : {}

", x);

3 x = 6;4

//^ cannot assign twice to immutable variable

5 println!("

the value of x is : {}

", x)

編譯時的錯誤提示資訊可以幫助我們避免修改乙個不可變變數,這種情形非常容易導致一些難以察覺的bug,因為我們的**邏輯可能會依賴於繫結這個變數上的不可變的值,所以一旦這個值發生變化,程式就無法繼續按照期望的方式執行下去,這種bug往往難以追蹤,特別是修改操作只在某些條件下偶然發生的時候。在類似的情形下,編譯時的錯誤提示資訊就顯得相當重要了。

編譯器能保證那些宣告為不可變的值一定不會發生改變。這意味著你無須在閱讀和編寫**時追蹤乙個變數會如何變化,從而使**邏輯更加易於理解和推導。

通過在宣告的變數前新增mut關鍵字可以使其可變,mut還會向閱讀**的人暗示其他**可能會改變這個變數的值。

let mut x = 5

;println!("

the value of x is {}

", x);

x = 6

;println!("

the value of x is {}

", x);

當你在使用某些重型資料結構時,適當地使用可變性去修改乙個例項,可能比賦值和重新返回乙個新分配的例項要更有效;而當資料結構較為輕量的時候,採用更偏向函式式的風格,通過建立新變數來進行賦值,可能會使**更加易於理解。

常量,就像不可變變數一樣,繫結到常量上的值無法被其他**修改。

常量和變數之間的區別:

const max_points: u32 = 100_000;

將整個程式中應編碼的值宣告為常量並給予其有意義的名字,可以幫助後來的維護者去理解這些值的意義,而使用同一常量來索引相同的應編碼值也能為將來的修改提供方便。

常量在整個程式執行的過程中都有自己宣告的作用域內有效,這使得常量可以被用於在程式的不同**之間共享值。

乙個新宣告的變數可以覆蓋掉舊的同名變數: 叫做第乙個變數被第二變數隱藏了。

let x = 5;

let x = x + 1;

let x = x * 2;

println!("the value of x is {}", x);

隱藏機制不同於將乙個變數宣告為mut,

let sapce = "     ";

let space = space.len();

rust中的每乙個值都有其特定的資料型別,rust會根據資料的型別來決定應該如何處理他們:

rust是一門靜態型別語言,這意味著他在編譯程式的過程中需要知道所有變數的具體型別。

大部分情況下,編譯器都可以根據我們繫結、使用變數的值來自動推導出變數的型別。

let guess : u32 = "42".parse().expect("not a number");

這裡必須顯示的標註型別。

標量型別是單個值型別的統稱。

整數型別:

長度有符號

無符號8bit

i8u8

16bit

i16u16

32bit

i32u32

64bit

i64u64

arch

isize

usize

isize 和 size 是兩種特殊的整數型別,他們的長度取決於程式執行的目標平台。

注意的:除了byte,其餘所有的字面量都可以使用型別字尾。例如: b'a'

rust對於整數字面量的預設推到型別i32通常是乙個很好的選擇。

較為特殊的兩個整型usize和isize則是主要用作某些集合的索引。

整數溢位:在debug模式下發生整數溢位會發出pani!, 而在release模式下,不會包含那些觸發panic的**。

rust會在溢位發生時執行二進位制補碼環繞,任何超出型別最大值的資料都會被環繞為型別最小值。

浮點數型別

在rust中,缺省會將浮點數字面量的型別推到為f64.

let x = 2.0; // f64

let y: f32 = 3.0; //f32

數值運算

let difference = 43.0 - 23.0;

let product = 3 * 3;

let quotient = 56.7 / 32.2;

let remainder = 43 % 3;

布林型別

let t = true;

let f: bool = false;

字元型別

let x = 'z';

rust中的char型別佔四個位元組,是乙個unicode標量值。

Rust學習 基礎概念

變數 let let mut const 資料型別 標量型別 scalar types 整型有符號 和 無符號 代表數字能否為負值 有符號 2 n 1 2 n 1 1 無符號 0 2 n 1 長度型別為 arch 表示根據當前計算機架構位數,64位就是64位,32位就是32位 宣告整型預設型別是 i...

Rust常用程式設計概念之變數和可變性

time 20190921 rust的學習曲線相對陡峭,更好的學習方式是先把概念理清楚,形成相對巨集觀的認知後,再動手實踐,和一般的語言學習方式略有不同。具體說就是,會涉及到rust語言的以下概念 預設情況下,變數是不可變的,如果想讓變數顯式可變,則用mut關鍵字修飾即可。那我們一定想問,這麼設計的...

Rust 併發程式設計 Thread Pool

在併發程式設計領域,乙個非常讓程式設計師興奮,感到有成就感的事情就是做效能優化,譬如發現某個執行緒成為了單點瓶頸,然後上多執行緒。提到了上多執行緒,那自然就會引入 thread pool,也就是我們通常說的執行緒池,我們會將任務扔給執行緒池,然後執行緒池裡面自己會負責將任務派發到不同的執行緒去執行,...