W mojej aplikacji opartej na Dart właśnie zauważyłem, że mogę pominąć new
słowo kluczowe i wszystko działa idealnie.
Zamiast tego final widget = new Widget();
mogę też użyć final widget = Widget();
.
Czy ma to jakiś wpływ na kod?
Nie. Z Dart 2 (kliknij na ogłoszenie o więcej informacji)new
a także const
słowa kluczowe zostały wykonane opcjonalne .
Oznacza to, że new Widget()
robi dokładnie to samo, co Widget()
samodzielnie.
Słowo const
kluczowe może jednak zmienić wartość, która nie byłaby const
niejawnie na const
.
Będziesz więc musiał wyraźnie określić, const
kiedy jest to potrzebne.
new
lubconst
są nadal wymagane (nie pamiętam przykładów ani zasad). Mogą podjąć kolejną próbę po Dart 2, aby uczynić ją opcjonalną wszędzie.new
jest to wymagane. Jeśli pominiesznew
w poprawnym programie, będzie on zawsze działał w ten sam sposób. Jeśli usunieszconst
z programu pracy, to w większości przypadków, gdzie byś mają napisaćconst
do programu było ważne, to nadal będzie ważny. Za każdym razem, gdyconst
wyrażenie jest już otaczające, możesz pominąć zagnieżdżoną stałą.W Dart 2, jeśli wywołasz konstruktor, taki jak funkcja, bez
new
lubconst
z przodu, jest to równoważne użyciunew
. Jeśli chcesz wywołać const, powinieneś umieścićconst
na początku.Wewnątrz wyrażenia const nie musisz pisać
const
ponownie, aw niektórych kontekstach, które wymagają wyrażeń const (takich jak wyrażenia przełączników wielkości liter i inicjatory zmiennych stałych), nie potrzebujesz nawet zewnętrznej stałej.Więc nigdy nie musisz pisać
new
.Zespół język dart chce zezwolić wyrażeń, gdzie można wstawić albo
new
alboconst
i jeszcze inwokacja być prawidłowe (czyli konstruktor const ze stałych argumentów) domyślnie do wstawianiaconst
zamiastnew
, z nadzieją na wczesnym aktualizacji do DART 2. Z tego powodu , polecam pisanienew
go przedObject()
lub inny const konstruktor gdzie trzeba obiekt będzie nowa instancja. To bardzo rzadki przypadek, zwykle nie przejmujesz się tożsamością niezmiennego obiektu (dlatego wstawianieconst
jest uważane za dobry pomysł).źródło
Jak podają wszystkie inne odpowiedzi, w Dart 2 użycie
new
jest opcjonalne. Co więcej, używanienew
jest zniechęcane przez wytyczne Effective Dart .źródło
Słowo
new
kluczowe zostało ustawione jako opcjonalne w Dart 2. Od teraz wywołanie klasy zawsze zwraca nową instancję tej klasy. Zgodnie z moją rekomendacją możesz go używać ( NIE OBOWIĄZKOWE ) poza definicją układu, ale pomijać w układach wewnętrznych.Jeszcze jedną kwestią, którą chciałbym się z wami podzielić, jest to, że jeśli używasz słowa kluczowego
new
lubconst
podczas deklarowania widżetów , możesz również zobaczyć ikonę +, której możesz użyć do zwinięcia i rozwinięcia kodu treści widżetu. Jest to przydatne, gdy chcesz zwinąć / ukryć resztę kodu widżetu w pliku rzutek podczas pracy nad innym kodem widgetu w tym samym pliku.źródło
new
jest odradzany: używanie go wygląda na to, że bezwarunkowo tworzy nową instancję, gdy może nie.