1. 程式人生 > 實用技巧 >五.相關的基本程式設計概念-變數|函式|表示式|語句|型別|迴圈

五.相關的基本程式設計概念-變數|函式|表示式|語句|型別|迴圈

變數和可變性

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 = '