Dart程式設計中的不變性
不變性是指保持不變的能力。每當我們談論不變性時,我們都會提到不變的特性。
在面向物件和函數語言程式設計中,我們大量使用物件的不可變特性。不可變意味著物件的狀態在其建立後不能被修改。
如今,當我們談論前端開發時,這是一個非常重要的主題,因為有很多場合和場景我們希望保持狀態,而實現這一目標的方法是利用不變性。
在Dart中,我們可以透過不同的方法實現不變性,有時我們也可以對我們的物件和類強制實施不變性。
使用'const'關鍵字可以很好地處理變數或物件的不變性。
需要注意的是,Dart中的const關鍵字與Javascript中的const關鍵字非常不同,即使它們使用相同的語法。
讓我們考慮一個例子,我們宣告一個Javascript中的const,然後嘗試將其重新賦值為其他內容,首先重新賦值整個物件,然後重新賦值其某些屬性。
示例
請考慮以下示例:
// Define USER as a constant and give it an initial value. const USER = { name: 'Mukul'; } // This will throw an error. USER = {}; // But this will not. USER.name = 'Rahul'; console.log(USER.name);
在上面的js程式碼中,我們可以看到,當我們嘗試用其他東西重新賦值USER時,它返回了一個錯誤。但是,如果我們賦值USER物件的name屬性,則不會遇到錯誤。
輸出
Rahul
發生這種情況是因為在js中,const關鍵字只是一個不可變的繫結,而不是一個不可變的物件。
在Dart中,情況完全不同,const關鍵字確保物件保持不變的特性。
示例
請考慮以下示例:
void main(){ const user = const {'name': 'Mukul'}; // Static error: "Constant variables cannot be assigned a value". user = {}; // Runtime error: "Unsupported operation: Cannot modify unmodifiable Map". user['name'] = 'Rahul'; }
輸出
lib/main.dart:5:3: Error: Can't assign to the const variable 'user'. user = {}; ^^^^ Error: Compilation failed.
廣告