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?
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?
Odpowiedzi:
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
jest to wymagane. Jeśli pominiesz new
w poprawnym programie, będzie on zawsze działał w ten sam sposób. Jeśli usuniesz const
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, gdy const
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
lub const
z przodu, jest to równoważne użyciu new
. 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
albo const
i jeszcze inwokacja być prawidłowe (czyli konstruktor const ze stałych argumentów) domyślnie do wstawiania const
zamiast new
, z nadzieją na wczesnym aktualizacji do DART 2. Z tego powodu , polecam pisanie new
go przed Object()
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 wstawianie const
jest uważane za dobry pomysł).
Jak podają wszystkie inne odpowiedzi, w Dart 2 użycie new
jest opcjonalne. Co więcej, używanie new
jest zniechęcane przez wytyczne Effective Dart .
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
lub const
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.
new
jest odradzany: używanie go wygląda na to, że bezwarunkowo tworzy nową instancję, gdy może nie.
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.