【问题标题】:Dart factory (constructor) vs. static method; e.g., why is int.parse() not a factory constructor?Dart 工厂(构造函数)与静态方法;例如,为什么 int.parse() 不是工厂构造函数?
【发布时间】:2014-02-18 18:48:58
【问题描述】:

Dart 样式指南 建议使用 constructors instead of static methods to create instances,因为 Dart 中的“命名构造函数和工厂构造函数为您提供了静态方法的所有灵活性其他语言,同时仍允许调用站点像常规构造函数调用一样显示"。

那么,将int.parse()double.parse() 声明为静态方法而不是工厂构造函数是否有技术原因?

更一般地说,在 Dart 中选择编写工厂构造函数而不是静态(工厂)方法的准则是什么?

【问题讨论】:

  • 是的,这似乎有点不一致。从这个角度来看,new int.fromString() 会更有意义。虽然int.parse() 感觉更自然。
  • 这很可能是另一种出于性能目的的特殊处理,但这只是胡乱猜测。
  • @MarioP:是的,我想这是有道理的。但是,我希望编译器在优化方面足够好,不需要这种特殊处理。
  • @ronag 事实证明我错了。 “感觉更自然”实际上更接近;-)

标签: constructor dart static-methods factory factory-method


【解决方案1】:

在 Google Groups 里摸索了一阵子,其实我确实找到了官方的解释:Link to Groups discussion

出于存档目的,此处引用链接中的文本:

我想过让它成为一个构造函数,但感觉它不适用于 int 或 double 值。

我将“parse”视为实用函数而不是构造函数,这可能是因为 int 和 double 在其他方面实际上没有构造函数。你不是创建一个整数,而是发现它。

此外,目前检查字符串是否为数字文字的唯一方法是调用 parse 并查看它是否抛出(但我对此并不完全满意!),我不喜欢抛出的构造函数除了编程错误。

而且你不必这样在它前面写“新”,没有什么特别的好处。

没有一个硬性原因使它显然不是构造函数,而是一堆较小的问题使我更喜欢它作为静态函数。

我的“性能目的”理论就这么多。哦,好吧。

【讨论】:

  • 好吧,因为 Dart 2.0 不鼓励使用 new ,所以真的没有区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2014-11-03
  • 2012-01-31
  • 2013-07-24
相关资源
最近更新 更多