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 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告