W mojej aplikacji opartej na Dart właśnie zauważyłem, że mogę pominąć newsł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ąć newsł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 constsłowa kluczowe zostały wykonane opcjonalne .
Oznacza to, że new Widget()robi dokładnie to samo, co Widget()samodzielnie.
Słowo constkluczowe może jednak zmienić wartość, która nie byłaby constniejawnie na const.
Będziesz więc musiał wyraźnie określić, constkiedy jest to potrzebne.
newjest to wymagane. Jeśli pominiesz neww poprawnym programie, będzie on zawsze działał w ten sam sposób. Jeśli usuniesz constz programu pracy, to w większości przypadków, gdzie byś mają napisać constdo programu było ważne, to nadal będzie ważny. Za każdym razem, gdy constwyrażenie jest już otaczające, możesz pominąć zagnieżdżoną stałą.
W Dart 2, jeśli wywołasz konstruktor, taki jak funkcja, bez newlub constz przodu, jest to równoważne użyciu new. Jeśli chcesz wywołać const, powinieneś umieścić constna początku.
Wewnątrz wyrażenia const nie musisz pisać constponownie, 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 newalbo consti jeszcze inwokacja być prawidłowe (czyli konstruktor const ze stałych argumentów) domyślnie do wstawiania constzamiast new, z nadzieją na wczesnym aktualizacji do DART 2. Z tego powodu , polecam pisanie newgo 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 constjest uważane za dobry pomysł).
Jak podają wszystkie inne odpowiedzi, w Dart 2 użycie newjest opcjonalne. Co więcej, używanie new jest zniechęcane przez wytyczne Effective Dart .
Słowo newkluczowe 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 newlub constpodczas 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.
newjest odradzany: używanie go wygląda na to, że bezwarunkowo tworzy nową instancję, gdy może nie.
newlubconstsą nadal wymagane (nie pamiętam przykładów ani zasad). Mogą podjąć kolejną próbę po Dart 2, aby uczynić ją opcjonalną wszędzie.