Вам нужно использовать "новое" ключевое слово в Dart?
В моем приложении на основе Dart я просто заметил, что могу опустить new
ключевое слово, и все работает отлично.
Вместо final widget = new Widget();
Я также могу использовать final widget = Widget();
,
Это влияет на код?
Ответы
Ответ 1
Нет. С Dart 2 (нажмите для объявления с дополнительной информацией) ключевые слова new
, а также const
были сделаны необязательными.
Это означает, что new Widget()
делает то же самое, что и Widget()
.
Однако ключевое слово const
может изменить значение, которое неявно не будет const
, на const
.
Поэтому вам нужно будет явно указать const
при необходимости.
Ответ 2
В Dart 2, если вы вызываете конструктор как функцию, без new
или const
перед, то это эквивалентно использованию new
. Если вы хотите вызвать const, тогда вы должны поставить const
перед собой.
Внутри выражения const вам больше не нужно писать const
, и в некоторых контекстах, требующих выражения const (например, выражения case case и инициализаторы константных переменных), вам даже не нужен внешний const.
Поэтому вам больше не нужно писать new
.
Команда языка Dart хочет разрешить выражения, в которые вы можете вставить либо new
либо const
и все еще иметь правильное обращение (то есть конструктор const с постоянными аргументами) по умолчанию, чтобы вставлять const
вместо new
, надеюсь, в раннем обновлении до Dart 2 По этой причине я рекомендую писать new
перед Object()
или любым другим конструктором const, где вам нужен объект, который будет новым экземпляром. Это очень редкий случай, обычно вам не нужна личность вашего неизменяемого объекта (вот почему вставка const
считается хорошей идеей).
Ответ 3
Как и все остальные ответы, в Dart 2 использование new
не является обязательным. Кроме того, использование new
не рекомендуется в соответствии с рекомендациями по эффективному дартсу.
Ответ 4
new
ключевое слово было сделано необязательным в Dart 2. На данный момент вызов класса всегда будет возвращать новый экземпляр этого класса. Согласно моей рекомендации, вы можете использовать его (НЕ ОБЯЗАТЕЛЬНО) вне определения макета, но не указывать внутри макетов.
Еще один момент, которым я хотел бы поделиться с вами, ребята, это то, что если вы используете ключевое слово new
или const
при объявлении виджетов, вы также можете увидеть значок +, который можно использовать для свертывания и расширения кода тела виджета. Это полезно, когда вы хотите свернуть/скрыть остальной код виджета в файле dart при работе с другим кодом виджета в том же файле.