五.相關的基本程式設計概念-變數|函式|表示式|語句|型別|迴圈
變數和可變性
Rust變數預設是不可改變的(immutable),一旦值被繫結一個名稱上,你就不能改變這個值
let x = 5;
x = 6;
報錯cannot assign twice to immutable variable
對不可變變數 x 賦第二個值,如果想要重新賦值,可以這樣做:
let mut x = 5;
x = 6;
通過 mut ,允許把繫結到 x 的值從 5 改成 6
變數和常量的區別
不可變變數和通常意義的常量有一定的區別
常量(constants)類似於不可變變數, 常量是繫結到一個名稱的不允許改變的值
(1)不允許對常量使用 mut 。常量不光預設不能變,它總是不能變。
(2)宣告常量使用 const 關鍵字而不是 let ,並且 必須 註明值的型別。在下一部分,“資料類
型” 中會介紹型別和型別註解,現在無需關心這些細節,記住總是標註型別即可。
(3)常量可以在任何作用域中宣告,包括全域性作用域,這在一個值需要被很多部分的程式碼用到時很有用。
(3)最後一個區別是,常量只能被設定為常量表達式,而不能是函式呼叫的結果,或任何其他只能在執行時計算出的值。
const MAX_POINTS: u32 = 100_000;
常量在整個程式生命週期中都有效
隱藏(Shadowing)
let x = 5;
let x = x + 1;
let x = x * 2;
這個程式首先將 x 繫結到值 5 上。接著通過 let x = 隱藏 x ,獲取初始值並加 1 ,這
樣 x 的值就變成 6 了。第三個 let 語句也隱藏了 x ,將之前的值乘以 2 , x 最終的
值是 12 。
對預設不可變變數x繫結初值,但是可以通過let定義同名的x對其進行隱藏,去掉let就等同於對不可變變數重新賦值了,會報錯
隱藏與將變數標記為 mut 是有區別的。當不小心嘗試對變數重新賦值時,如果沒有使用
let 關鍵字,就會導致編譯時錯誤。通過使用 let ,我們可以用這個值進行一些計算,不
過計算完之後變數仍然是不變的。
mut 與隱藏的另一個區別是,當再次使用 let 時,實際上建立了一個新變數,我們可以改
變值的型別,但複用這個名字。
let spaces = " ";
let spaces = spaces.len();
資料型別
Rust 是 靜態型別(statically typed)語言,也就是說在編譯時就必須知道所有變數的
型別
let guess: u32 = "42".parse().expect("Not a number!");
u32即型別註解,如果不加
let guess = "42".parse().expect("Not a number!");
則會報錯。
標量型別
標量(scalar)型別代表一個單獨的值。Rust 有四種基本的標量型別:整型、浮點型、布林
型別和字元型別
長度 | 有符號 | 無符號 |
---|---|---|
8-bit16-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
isize 和 usize 型別依賴執行程式的計算機架構:64 位架構上它們是 64 位的, 32
位架構上它們是 32 位的。
Rust 中的整型字面值
數字字面值 | 例子 |
---|---|
Decimal | 98_222 |
Hex | 0xff |
Octal | 0o77 |
Binary | 0b1111_0000 |
Byte | ( u8 only) b'A' |
浮點型
f32 是單精度浮點數, f64 是雙精度浮點數。
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
數值運算
fn main() {
// 加法
let sum = 5 + 10;
// 減法
let difference = 95.5 - 4.3;
// 乘法
let product = 4 * 30;
// 除法
let quotient = 56.7 / 32.2;
// 取餘
let remainder = 43 % 5;
}
布林型
fn main() {
let t = true;
let f: bool = false; // 顯式指定型別註解
}
字元型別
Rust 的 char 型別是語言中最原生的字母型別
fn main() {
let c = 'z';
let z = 'ℤ';
let heart_eyed_cat = '