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.

更新於:2021年5月21日

618 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告