變數、基本型別、函式、控制流
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;隱藏機制不同於將乙個變數宣告為mut,let x = x + 1;
let x = x * 2;
println!("the value of x is {}", x);
let sapce = " ";rust中的每乙個值都有其特定的資料型別,rust會根據資料的型別來決定應該如何處理他們:let space = space.len();
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,也就是我們通常說的執行緒池,我們會將任務扔給執行緒池,然後執行緒池裡面自己會負責將任務派發到不同的執行緒去執行,...