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.
广告