È necessario utilizzare la parola chiave "nuova" in Dart?


94

Nella mia applicazione basata su Dart ho appena notato che posso omettere la newparola chiave e tutto funziona perfettamente.

Invece di final widget = new Widget();posso anche usare final widget = Widget();.

Questo ha qualche effetto nel codice?

Risposte:


119

No non lo fa. Con Dart 2 (clicca per l'annuncio con più informazioni) il newe anche constle parole chiave sono state fatte opzionale .

Ciò significa che new Widget()fa esattamente lo stesso che Widget()da solo.


La constparola chiave può, tuttavia, modificare un valore che non sarebbe constimplicitamente in a const.
Quindi dovrai specificare esplicitamente constquando necessario.


6
Il team Dart ha dovuto ritirarsi un po 'per ora e ci sono alcune situazioni in cui newo constsono ancora necessarie (non ricordo esempi o regole). Potrebbero fare un altro tentativo dopo Dart 2 per renderlo opzionale ovunque.
Günter Zöchbauer

1
Non ci sono posti dove newè richiesto. Se ometti newda un programma corretto, continuerà a funzionare sempre allo stesso modo. Se si rimuove constda un programma di lavoro, quindi nella maggior parte dei casi in cui si desidera avere a scrivere constper il programma sia valido, sarà ancora valida. Ogni volta che è già presente un constcontorno all'espressione, è possibile omettere la const annidata.
lrn

20

In Dart 2, se si richiama un costruttore come una funzione, senza un newo constdavanti, equivale a usare new. Se vuoi un'invocazione const, dovresti mettere constin primo piano.

All'interno di un'espressione const, non è necessario scrivere di constnuovo e in alcuni contesti che richiedono espressioni const (come espressioni di maiuscole e minuscole e inizializzatori di variabili const), non è nemmeno necessario il const esterno.

Quindi non hai mai bisogno di scrivere new.

Il team del linguaggio di Dart vuole consentire alle espressioni in cui è possibile inserire o newo conste che l'invocazione sia corretta (ovvero un costruttore const con argomenti costanti) per impostazione predefinita l'inserimento constanziché new, si spera in un aggiornamento iniziale di Dart 2. Per questo motivo , Ti consiglio di scriverlo newdavanti a Object(), o qualsiasi altro costruttore const in cui hai bisogno che l'oggetto sia una nuova istanza. È un caso molto raro, di solito non ti interessa l'identità del tuo oggetto immutabile (motivo per cui l'inserimento constè considerato una buona idea).



5

La newparola chiave è stata resa facoltativa in Dart 2. A partire da ora, la chiamata di una classe restituirà sempre una nuova istanza di quella classe. Come da mia raccomandazione, puoi usarlo ( NON OBBLIGATORIO ) al di fuori di una definizione di layout, ma ometterlo all'interno di layout.

Un altro punto che vorrei condividere con voi ragazzi è che se usate newo la constparola chiave durante la dichiarazione dei widget , potete anche vedere l' icona + che potete usare per comprimere ed espandere il codice del corpo del widget. Ciò è utile quando si desidera comprimere / nascondere il codice restante del widget nel file dart mentre si lavora su un altro codice del widget nello stesso file.


Buona presa su quella cosa del collasso
MoGa

2
Il comportamento di compressione sarebbe specifico dell'IDE. Dovresti dichiarare esplicitamente a quale (i) si applica.
jamesdlin

1
Inoltre, "chiamare una classe" (con cui presumo tu intenda "invocare il costruttore di una classe") non sempre restituisce una nuova istanza della classe. Se invochi un costruttore di fabbrica , potresti recuperare un'istanza esistente . Questo è il motivo per cui newè sconsigliato: usarlo sembra che crei incondizionatamente una nuova istanza quando potrebbe non farlo.
jamesdlin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.