Фабрика дротиков (конструктор) против статического метода; Например, почему int.parse() не является конструктором фабрики?

Руководство по стилю Dart рекомендует использовать конструкторы вместо статических методов для создания экземпляров, учитывая, что "именованные конструкторы и конструкторы фабрики в Dart предоставляют вам всю гибкость статических методов в других языках, в то же время позволяя вызывать сайт как обычный вызов конструктора".".

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

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

1 ответ

Решение

Покопавшись в группах Google некоторое время, я действительно нашел официальное объяснение этому: ссылка на обсуждение групп

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

Я думал о том, чтобы сделать его конструктором, но он не подходил для значений типа int или double.

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

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

И вам не нужно писать "новый" перед этим таким образом, без особой выгоды.

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

Так много для моей теории "производительности". Ну что ж.

Другие вопросы по тегам