2014-01-27 2 views
5

Dart Style Guide рекомендует использовать constructors instead of static methods to create instances, учитывая, что "названные Конструкторы и завода Конструкторы в Дарта даст вам все гибкость статических методов на других языках, в то же время позволяя callsite появляться как обычный вызов конструктора ".Dart factory (конструктор) против статического метода; например, почему int.parse() не является заводским конструктором?

Есть ли какая-то техническая причина для того, чтобы объявить int.parse() и double.parse() статическими методами, а не заводскими конструкторами?

В целом, каковы были бы рекомендации по выбору фабричного конструктора над статическим (заводским) методом в Dart?

+0

Да, это кажется немного непоследовательным. 'new int.fromString()' будет иметь больше смысла с этой точки зрения. Хотя 'int.parse()' чувствует себя более естественным. – ronag

+0

Это вполне может быть другим специальным способом для достижения целей, но это действительно просто дикое догадка. – MarioP

+0

@MarioP: Да, я думаю, это имеет смысл. Однако я бы надеялся, что компилятор достаточно хорош для оптимизации того, что такое специальное обращение не требуется. – ronag

ответ

5

После покопаться в Google Groups на некоторое время, я на самом деле найти официальное объяснение этого: Link to Groups discussion

Для архивных целей, здесь текст цитируется по ссылке:

I думал о том, чтобы сделать его конструктором, но он не чувствовал себя хорошо для int или double values.

Я вижу «разобрать» как функцию полезности больше, чем конструктор, возможно, потому, что int и double на самом деле не имеют конструкторов. Вы не создаете целое число, вы его обнаружите.

Кроме того, в настоящее время единственный способ проверить, является ли строка числовым литералом, - это вызвать синтаксический анализ и посмотреть, не выбрасывает ли он (но я не совсем этому доволен), и мне не нравятся конструкторы, которые бросают на чем угодно, кроме ошибок программирования.

И вам не нужно писать «новое» перед ним таким образом, чтобы не получить особую выгоду.

Нет единственной жесткой причины, которая делает ее явно не конструктором, а кучей меньших проблем, которые вместе заставляют меня отдать предпочтение статической функции.

Так много для моей теории «служебных целей». Ну что ж.

Смежные вопросы