Rust 所有權(四):可變性

以不變應萬變,敵變我不變,萬變不離其宗 

解釋:世間萬物變化莫測,我們辦事要注意觀察其變化,處變不驚。在沒有變化時我們進行提前準備,將事物的變化加以充分考慮,解決千變萬化的事態發展。

《道德經》

  老子曾教導程序員們可以運用 “不可變性” 來應對程序中的許多變化。不可變的數據是指,一旦數據被創建就不允許再修改。如果程序中的數據都是不可變的,那麼代碼寫起來和理解起來會更容易。例如,更容易實現緩存、更容易實現變更檢測以及不再懼怕到處可變的狀態。

  在 JavaScript 中,我們推薦對值不會改變的變量使用 const 聲明而非 let 聲明。因爲 let 聲明的變量是可變的,而 const 聲明是不可變的。示例:

// JavaScript
let x = 0;
x = 1;  // OK
const y = 0;
y = 1;  // Error

  在 Rust 中,也有 let 和 const 關鍵字。其與 JavaScript 語言相同的地方是使用 let 定義的變量是可變的;使用 const 定義的變量是不可變的。不相同的地方是 let 在默認情況下是不可變的。挺繞的,必須看代碼:

// Rust
let x = 0;
x = 1;  // Error
const y: i32 = 0;
y = 1;  // Error

  此例第 7 行不出意料的出錯了,因爲 const 表示常量,一經初始化便不允許再修改。微妙的是第 4 行也會報錯。這就是所謂的 let 在默認情況下也是不可變的。如果想讓 let 成爲可變的,那麼必須使用 mut 關鍵字明確聲明。示例:

// Rust
let mut x = 0;
x = 1;  // OK
const y: i32 = 0;
y = 1;  // Error

  沒錯,mut 正是 mutable(可變的)的英文縮寫。此外,不允許對 const 綁定使用 mut 關鍵字。

  正所謂大道至簡。在當前複雜的環境下,該思想有着深遠的影響,請細品。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/BL3KJfpQssQtcc4rXCdBpA