在基于Dart的应用程序中,我刚刚注意到可以省略new
关键字,并且一切正常。
代替final widget = new Widget();
我也可以使用final widget = Widget();
。
这对代码有影响吗?
Answers:
不,不是的。使用Dart 2(单击以获取更多信息的公告),new
andconst
关键字也变为可选。
这意味着该new Widget()
操作与单独执行的操作完全相同Widget()
。
该const
关键字可以,但是,更改将不会是一个值const
隐含的const
。
因此,您将必须明确指定const
何时需要。
new
需要的地方。如果省略new
正确的程序,它将始终以相同的方式工作。如果您const
从一个正在运行的程序中删除,则在大多数情况下,您必须编写const
程序才能使其有效,该程序仍然有效。只要const
表达式周围已经存在,就可以省略嵌套的const。
在Dart 2中,如果您调用的是类似函数的构造函数,而前面没有new
或const
,则相当于使用new
。如果要进行const调用,则应放在const
最前面。
在const表达式内部,您无需const
再次编写,并且在某些需要const表达式的环境中(例如,转换案例表达式和const变量的初始化程序),您甚至不需要外部const。
因此,您根本不需要写new
。
Dart语言团队希望允许您可以在其中插入new
或const
且仍然使调用正确的表达式(即具有常量参数的const构造函数)默认为插入const
而不是new
,希望可以在Dart 2的早期更新中使用。 ,建议new
您在Object()
或需要将对象作为新实例的任何其他const构造函数的前面编写它。这是一种非常罕见的情况,通常您不关心不可变对象的身份(这就是为什么将插入视为好主意的原因)。const
该new
关键字在现在达特2.成为可选,调用类将始终返回这个类的一个新实例。根据我的建议,您可以在Layout定义之外使用它(NOT MANDATORY),但是在Layouts内部可以省略。
我想与大家分享的另一点是,如果您在声明小部件时使用new
或const
关键字,则还可以看到+图标,可用于折叠和展开小部件主体代码。当您要折叠/隐藏dart文件中的其余窗口小部件代码而在同一文件中处理其他窗口小部件代码时,此功能很有用。
new
不鼓励这样做的原因:使用它看起来像是无条件地创建了一个新实例,而实际上并没有。
new
或const
仍然需要(我不记得示例或规则)。在Dart 2之后,他们可能会再次尝试使其在所有地方都是可选的。