Фабрика дротиков (конструктор) против статического метода; Например, почему int.parse() не является конструктором фабрики?
Руководство по стилю Dart рекомендует использовать конструкторы вместо статических методов для создания экземпляров, учитывая, что "именованные конструкторы и конструкторы фабрики в Dart предоставляют вам всю гибкость статических методов в других языках, в то же время позволяя вызывать сайт как обычный вызов конструктора".".
Есть ли техническая причина для того, чтобы заявить int.parse()
а также double.parse()
как статические методы, а не фабричные конструкторы?
В более общем смысле, каковы были бы правила выбора фабричного конструктора вместо статического (фабричного) метода в Dart?
1 ответ
Покопавшись в группах Google некоторое время, я действительно нашел официальное объяснение этому: ссылка на обсуждение групп
Для архива, здесь текст, указанный по ссылке:
Я думал о том, чтобы сделать его конструктором, но он не подходил для значений типа int или double.
Я вижу "parse" как вспомогательную функцию больше, чем конструктор, возможно потому, что int и double на самом деле не имеют конструкторов иначе. Вы не создаете целое число, вы обнаруживаете его.
Кроме того, в настоящее время единственный способ проверить, является ли строка числовым литералом, состоит в том, чтобы вызвать parse и посмотреть, бросает ли она (но я не совсем удовлетворен этим!), И мне не нравятся конструкторы, которые бросают что-либо, кроме программирования ошибки.
И вам не нужно писать "новый" перед этим таким образом, без особой выгоды.
Нет единственной веской причины, которая делает его явно не конструктором, а множеством мелких проблем, которые вместе заставляют меня предпочесть его как статическую функцию.
Так много для моей теории "производительности". Ну что ж.