Rust 運算子及示例

日升_rs發表於2024-09-06

Rust 運算子

Rust 提供了一系列運算子(operators),每種運算子都有特定的功能和應用場景。

1. 算術運算子

這些運算子用於基本的數學運算:

  • + : 加法,用於兩個數相加。
    • 示例: let sum = 5 + 10;
  • - : 減法,用於兩個數相減。
    • 示例: let difference = 10 - 5;
  • * : 乘法,用於兩個數相乘。
    • 示例: let product = 4 * 3;
  • / : 除法,用於兩個數相除。
    • 示例: let quotient = 10 / 2;
  • % : 取餘,用於計算兩個數的餘數。
    • 示例: let remainder = 10 % 3;

2. 比較運算子

這些運算子用於比較兩個值,返回一個布林值:

  • == : 相等,用於判斷兩個值是否相等。
    • 示例: let is_equal = 5 == 5;
  • != : 不相等,用於判斷兩個值是否不相等。
    • 示例: let is_not_equal = 5 != 6;
  • > : 大於,用於判斷左邊的值是否大於右邊的值。
    • 示例: let is_greater = 10 > 5;
  • < : 小於,用於判斷左邊的值是否小於右邊的值。
    • 示例: let is_less = 5 < 10;
  • >= : 大於或等於,用於判斷左邊的值是否大於或等於右邊的值。
    • 示例: let is_greater_or_equal = 10 >= 10;
  • <= : 小於或等於,用於判斷左邊的值是否小於或等於右邊的值。
    • 示例: let is_less_or_equal = 5 <= 10;

3. 邏輯運算子

這些運算子用於邏輯運算,通常與布林值結合使用:

  • && : 邏輯與,用於判斷兩個布林表示式是否都為 true
    • 示例: let and_result = true && false;
  • || : 邏輯或,用於判斷兩個布林表示式是否至少一個為 true
    • 示例: let or_result = true || false;
  • ! : 邏輯非,用於取反一個布林表示式。
    • 示例: let not_result = !true;

4. 賦值運算子

這些運算子用於將值賦給變數:

  • = : 賦值,將右邊的值賦給左邊的變數。
    • 示例: let x = 5;
  • += : 加賦值,將右邊的值加到左邊的變數上。
    • 示例: let mut x = 5; x += 10;
  • -= : 減賦值,將右邊的值從左邊的變數中減去。
    • 示例: let mut x = 10; x -= 5;
  • *= : 乘賦值,將右邊的值乘以左邊的變數。
    • 示例: let mut x = 2; x *= 3;
  • /= : 除賦值,將左邊的變數除以右邊的值。
    • 示例: let mut x = 10; x /= 2;
  • %= : 模賦值,將左邊的變數取模右邊的值。
    • 示例: let mut x = 10; x %= 3;

5. 位運算子

這些運算子用於對位進行操作,通常用於底層程式設計或特定演算法實現:

  • & : 按位與,對兩個整數的對應位都為 1 時結果為 1。
    • 示例: let and = 5 & 3; // 結果為 1
  • | : 按位或,對兩個整數的對應位有一個為 1 時結果為 1。
    • 示例: let or = 5 | 3; // 結果為 7
  • ^ : 按位異或,對兩個整數的對應位不同則結果為 1。
    • 示例: let xor = 5 ^ 3; // 結果為 6
  • ! : 按位非,對整數的每一位取反。
    • 示例: let not = !0b0001_0010; // 結果為 0b1110_1101
  • << : 左移,將位向左移動指定的位數(右邊補零)。
    • 示例: let left_shift = 1 << 3; // 結果為 8
  • >> : 右移,將位向右移動指定的位數(左邊補符號位或補零)。
    • 示例: let right_shift = 8 >> 3; // 結果為 1

6. 範圍運算子

範圍運算子用於生成數值範圍:

  • .. : 半開區間,從起始值到結束值(不包括結束值)。
    • 示例: for i in 0..5 { println!("{}", i); } // 輸出 0 到 4
  • ..= : 閉區間,從起始值到結束值(包括結束值)。
    • 示例: for i in 0..=5 { println!("{}", i); } // 輸出 0 到 5
  • ..(單側範圍): 生成從起始值到某個值或從某個值到結束值的範圍。
    • 示例:
      • let r = 3..; // 從 3 到無窮大
      • let r = ..3; // 從負無窮大到 3

7. 引用與解引用運算子

這些運算子用於處理指標和引用:

  • & : 引用運算子,建立一個引用(即指向某個值的指標)。
    • 示例: let x = 5; let y = &x;
  • * : 解引用運算子,解引用一個指標或引用,獲取其指向的值。
    • 示例: let x = 5; let y = &x; let z = *y;

8. 其他運算子

  • . : 成員訪問或方法呼叫。
    • 示例: let len = vec.len();
  • .. : 結構體更新語法或元組解構。
    • 示例: let updated = Person { age: 30, ..person };
  • [] : 索引運算子,用於訪問陣列、切片、向量等的元素。
    • 示例: let first = arr[0];
  • () : 呼叫函式或方法,或用於將表示式分組。
    • 示例: let result = add(5, 3);
  • ? : 錯誤傳播運算子,用於傳播 ResultOption 型別的錯誤。
    • 示例: let value = some_function()?;
  • :: : 訪問路徑運算子
    • 在模組系統中,用於訪問模組中的專案(如函式、常量、型別)。
    • 用於呼叫結構體、列舉的關聯函式或靜態方法。
    • 從一個模組或包中訪問另一個模組或包的專案。
    • 示例:
mod math {
    pub const PI: f64 = 3.14159;
    pub fn add(a: i32, b: i32) -> i32 {
        a + b
    }
}
fn main() {
    let pi = math::PI;
    let sum = math::add(5, 10);
    let origin = Point::origin();
    let color = Color::Red;
}
struct Point {
    x: i32,
    y: i32,
}
impl Point {
    pub fn origin() -> Self {
        Point { x: 0, y: 0 }
    }
}
enum Color {
    Red,
    Green,
    Blue,
}
  • as : 轉換運算子:用於型別轉換,將一個值轉換為另一種型別。
    • 示例
let x = 5;
let y = x as f64; // 將 i32 轉換為 f64
  • _ : 佔位符:
    • 在模式匹配中表示萬用字元,忽略某個值;或者在型別推斷中使用表示不關心的型別。
    • 示例
let tuple = (1, 2, 3);
let (_, y, _) = tuple;
let v: Vec<_> = (0..10).collect();
  • |: 模式匹配中的或運算子:
    • 在模式匹配中表示多種模式的組合,即如果任何一種模式匹配,則匹配成功。
    • 示例
let x = 1;
match x {
    1 | 2 => println!("One or two"), // 如果 x 是 1 或 2,都會匹配
    _ => println!("Other"),
}

總結

Rust 提供了豐富的運算子,以便開發者在不同的程式設計場景下使用。每個運算子都有其特定的功能和適用場景,理解它們的用法有助於編寫更加高效和清晰的 Rust 程式碼。

引用

  • 運算子與符號

相關文章