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