Dart 编程中的不变性

不变性是保持不变的能力。每当我们谈论不变性时,我们都会提到不变性。

在面向对象和函数式编程中,我们经常利用对象的不可变特性。不可变意味着对象的状态在创建后无法修改。

这是当今我们谈论前端开发的一个非常重要的话题,因为有多种场合和场景我们想要维护状态,而这样做的方法是利用不变性。

在 Dart 中,我们可以通过不同的方式实现不变性,有时我们也可以对我们的对象和类实施不变性。

使用' const '关键字可以很好地处理变量或对象的不变性。

应该注意的是,dart 中的 const 关键字与 javascript 中的关键字非常不同,即使它们使用相同的语法。

让我们考虑一个例子,我们在 javascript 中声明一个 const,然后尝试将它重新分配给其他东西,首先重新分配整个对象,然后重新分配它的某些属性。

示例

考虑下面显示的例子 -

// 将 USER 定义为常量并为其赋予初始值。
const USER = { name: 'Mukul'; }

// 这将引发错误。
USER = {};

// 但这不会。
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.