Dart风格指南建议使用构造函数而不是静态方法来创建实例, 因为“Dart中的命名构造函数和工厂构造函数为您提供了其他语言中静态方法的所有灵活性,同时仍允许调用方看起来像常规构造函数调用”。
那么,将int.parse()
和double.parse()
声明为静态方法而不是工厂构造函数是否有技术原因呢?
更一般地说,在Dart中选择编写工厂构造函数还是静态(工厂)方法的准则是什么?
Dart风格指南建议使用构造函数而不是静态方法来创建实例, 因为“Dart中的命名构造函数和工厂构造函数为您提供了其他语言中静态方法的所有灵活性,同时仍允许调用方看起来像常规构造函数调用”。
那么,将int.parse()
和double.parse()
声明为静态方法而不是工厂构造函数是否有技术原因呢?
更一般地说,在Dart中选择编写工厂构造函数还是静态(工厂)方法的准则是什么?
在 Google Groups 上搜索了一段时间后,我确实找到了官方的解释:讨论链接
为了档案保留,这里引用自链接的文本:
我曾考虑把它做成构造函数,但对于 int 或 double 值并不合适。
我认为“parse”更像是一个实用函数,而不是构造函数,可能是因为 int 和 double 并没有其他构造函数。你不会创建一个整数,而是发现它。
此外,当前唯一检查字符串是否为数字字面值的方法是调用 parse 并查看它是否抛出异常(但我对此并不完全满意!),而我不喜欢除编程错误以外的任何情况下都会抛出异常的构造函数。
而且这样做不需要在前面加上 “new”,也没有特别的好处。
没有单个硬性原因明显地使它不是构造函数,但有一堆较小的问题共同使我更喜欢将其作为静态函数。
那么我的“性能优化”理论就到此为止了。哦,算了吧。
new int.fromString()
更合理。尽管int.parse()
感觉更自然。 - ronag