你需要在Dart中使用"new"关键字吗?

cre*_*not 58 dart

在我的基于Dart的应用程序中,我只是注意到我可以省略new关键字,一切都很好.

而不是final widget = new Widget();我也可以使用final widget = Widget();.

这对代码有影响吗?

cre*_*not 72

不,不是的.使用Dart 2(单击以获取更多信息的公告),new以及const关键字也是可选的.

这意味着与其自身new Widget()完全相同Widget().

  • Dart团队现在不得不收回一点,有些情况下仍然需要`new`或`const`(我不记得例子或规则).他们可能会在Dart 2之后再尝试使其在任何地方都可选. (5认同)

lrn*_*lrn 15

在Dart 2中,如果你像一个函数一样调用一个构造函数,没有new或者const在前面,那么它等同于使用new.如果你想要一个const调用,那么你应该放在const前面.

const表达式中,您不需要const再次编写,并且在某些需要 const表达式的上下文中(如switch变量的表达式和初始化器),您甚至不需要外部const.

所以你永远不需要写new.

飞镖语言团队希望让表达式,可以插入任何newconst仍然有调用是正确的(即,一个const构造一个常量参数)默认为插入const代替new,希望在早期更新省道2.出于这个原因,我建议new在前面Object()或任何其他const构造函数中编写它,您需要将对象作为新实例.这是一个非常罕见的情况,通常你不关心你的不可变对象的身份(这就是为什么插入const被认为是一个好主意).


jam*_*lin 7

As all of the other answers state, in Dart 2, using new is optional. Furthermore, using new is discouraged by the Effective Dart guidelines.


Rah*_*rma 6

new关键字在 Dart 2 中是可选的。到目前为止,调用一个类将始终返回该类的一个新实例。根据我的建议,您可以在 Layout 定义之外使用它(NOT MANDATORY),但在 Layouts 内部省略。

我想与大家分享的另一点是,如果您在声明小部件时使用neworconst关键字,您还可以看到+ 图标,您可以使用它来折叠和展开小部件主体代码。当您在处理同一文件中的另一个小部件代码时想要折叠/隐藏dart 文件中的其余小部件代码时,这很有用。

  • 折叠行为将是特定于 IDE 的。您应该明确说明它适用于哪些(些)人。 (2认同)
  • 另外,“调用类”(我假设您的意思是“调用类的构造函数”)并不总是返回该类的新实例。如果您调用*工厂*构造函数,您可能会得到一个*现有*实例。这就是为什么不鼓励使用“new”:使用它看起来像是无条件地创建一个新实例,而实际上它可能不会。 (2认同)