在Dart中是否必须使用new关键字?省略它对代码有影响吗?
省略Dart中的
new关键字对代码有影响吗? 嘿,这个问题问得特别实在!其实从Dart 2.0版本开始,new关键字就已经变成可选的了——你完全可以放心省略它,不管是代码运行逻辑还是性能,都不会有任何影响。下面给你拆解几个关键点:
语法与编译层面完全等价
不管你写不写new,Dart编译器都会把这两种写法当成完全相同的代码处理。比如你写:final widget = new Widget();和
final widget = Widget();编译后的结果没有任何区别,最终都会调用
Widget的构造函数创建实例。官方推荐的简洁写法
Dart团队在2.0之后就明确推荐省略new,这样代码会更清爽易读,尤其是在Flutter开发中嵌套Widget的时候,能减少大量冗余字符。比如原来的:new Container( child: new Text('Hello Dart'), padding: new EdgeInsets.all(8), )现在可以写成:
Container( child: Text('Hello Dart'), padding: EdgeInsets.all(8), )是不是看起来舒服多了?
几乎不存在混淆风险
有人可能会担心:如果类里有和类名同名的静态方法,会不会调用错?其实完全不用担心——Dart会优先把Class()解析为构造函数调用,如果你要调用静态方法,必须写成Class.method()的形式(比如MyWidget.create()),所以根本不会和构造函数调用混淆。
举个实际的例子验证一下:
class User { User() { print('调用普通构造函数'); } factory User.fromId(int id) { print('调用工厂构造函数'); return User(); } static User create() { print('调用静态方法'); return User(); } } void main() { // 两种写法都调用普通构造函数 final u1 = new User(); final u2 = User(); // 两种写法都调用工厂构造函数 final u3 = new User.fromId(1); final u4 = User.fromId(1); // 调用静态方法必须加方法名 final u5 = User.create(); }
总的来说,省略new是现在Dart的标准写法,完全安全,还能让代码更简洁,放心用就好!
内容的提问来源于stack exchange,提问作者creativecreatorormaybenot
相关产品推荐
相关产品推荐

