0%

【文章翻譯】An intro to immutability with Dart

【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】

Dart 的不可變性介紹

不可否認,不可變性是程式設計中的一個熱門話題,尤其是在前端程式設計中。像 Immutable.js 這樣的函式庫和其他概念,像是單向資料流,都認為當資料在您不知不覺中沒有發生變化時,更容易理解資料:

在物件導向和函數式程式設計中,不可變物件(不可更改物件)是指在建立後其狀態無法修改的物件。這與可變物件(可更改物件)相反,後者可以在建立後進行修改。

那麼,Dart 呢?我們有一些概念非常適合不可變性和內建的不可變物件,從 const 修飾符和 const 建構函式開始。不要與 ES6 中的 const 混淆,後者只是一個不可變的繫結:

在 Dart 中,const 既是一個不可變的繫結,也 一個不可變的物件:

所有字面量(NullStringintdoublenumboolMapListSymbol)都可以是 const,並且可以使用 const 建構函式建立使用者類型:

讓我們回顧一下 - const 實例既是不可變的繫結,並且在語言層面上被 強制 為深度不可變的 - 並且在編譯時被 規範化 - 也就是說,任何兩個實例都被認為是等效的,並且在運行時只由一個實例表示。例如,以下程式碼相當便宜 - 它在執行時只分配一個實例:

想了解更多嗎?閱讀關於 final 和 const 的 Dart 語言導覽

使用 package:meta 進行進一步的靜態檢查

當然,const 有點限制 - 您必須能夠在編譯時建立一個類別 - 因此您不能例如讀取資料庫並在執行時建立 const 物件。我們最近在 package:meta 中引入了 @immutable 註釋:

您可以使用此註釋來幫助確保開發人員保持您的類別深度不可變。它不會像 const 那樣被規範化,但仍然對開發人員很有幫助。

希望這是一個很好的不可變性介紹。如果您想了解更多關於 Dart 或不可變性的資訊,請在評論中或 Twitter 上告訴我。


Dart 的不可變性介紹 最初發佈在 dartlang 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。