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.