Apakah Anda perlu menggunakan kata kunci "baru" di Dart?

96

Dalam aplikasi berbasis Dart saya, saya hanya memperhatikan bahwa saya dapat menghilangkan newkata kunci dan semuanya bekerja dengan baik.

Selain final widget = new Widget();saya juga bisa menggunakan final widget = Widget();.

Apakah ini berpengaruh pada kode?

creativecreatorormaybenot
sumber

Jawaban:

121

Tidak. Dengan Dart 2 (klik untuk pengumuman dengan informasi lebih lanjut) yang newdan juga constkata kunci dibuat opsional .

Ini berarti new Widget()melakukan hal yang sama seperti Widget()pada dirinya sendiri.


Kata constkunci dapat, bagaimanapun, mengubah nilai yang tidak secara constimplisit menjadi const.
Jadi, Anda harus menentukan secara eksplisit constkapan diperlukan.

creativecreatorormaybenot
sumber
6
Tim Dart harus mundur sedikit untuk saat ini dan ada beberapa situasi di mana newatau constmasih diperlukan (saya tidak ingat contoh atau aturan). Mereka mungkin mencoba lagi setelah Dart 2 untuk menjadikannya opsional di mana pun.
Günter Zöchbauer
1
Tidak ada tempat newyang dibutuhkan. Jika Anda menghilangkan newdari program yang benar, program itu akan selalu bekerja dengan cara yang sama. Jika Anda menghapus constdari program kerja, maka dalam banyak kasus di mana Anda harus menulis constagar program tersebut valid, itu akan tetap valid. Setiap kali sudah ada constekspresi yang mengelilingi, Anda bisa menghilangkan konstanta bertingkat.
lrn
20

Dalam Dart 2, jika Anda memanggil konstruktor seperti fungsi, tanpa newatau constdi depan, maka itu setara dengan menggunakan new. Jika Anda menginginkan doa konstelasi, maka Anda harus meletakkannya constdi depan.

Di dalam ekspresi const, Anda tidak perlu menulis constlagi, dan dalam beberapa konteks yang memerlukan ekspresi const (seperti ekspresi switch case dan penginisialisasi variabel const), Anda bahkan tidak memerlukan konstanta luar.

Jadi, Anda tidak perlu menulis new.

Tim bahasa Dart ingin mengizinkan ekspresi di mana Anda dapat menyisipkan salah satu newatau constdan masih memiliki pemanggilan yang benar (yaitu, konstruktor const dengan argumen konstan) ke default untuk menyisipkan constalih-alih new, semoga dalam pembaruan awal ke Dart 2. Untuk alasan itu , Saya sarankan menulisnya newdi depan Object(), atau konstruktor const lainnya di mana Anda memerlukan objek untuk menjadi instance baru. Itu kasus yang sangat jarang, biasanya Anda tidak peduli dengan identitas objek tetap Anda (itulah sebabnya memasukkan constdianggap ide yang bagus).

lrn
sumber
5

Kata newkunci dibuat opsional di Dart 2. Saat ini, memanggil kelas akan selalu mengembalikan instance baru dari kelas itu. Sesuai rekomendasi saya, Anda dapat menggunakannya ( TIDAK WAJIB ) di luar definisi Tata Letak, tetapi hilangkan di dalam Tata Letak.

Satu hal lagi yang ingin saya bagikan kepada kalian adalah jika Anda menggunakan newatau constkata kunci saat mendeklarasikan widget , Anda juga dapat melihat ikon + yang dapat Anda gunakan untuk menutup dan memperluas kode badan widget. Ini berguna ketika Anda ingin menutup / menyembunyikan kode widget lainnya di file dart saat mengerjakan kode widget lain di file yang sama.

Rahul Sharma
sumber
Tangkapan bagus pada benda yang runtuh itu
MoGa
2
Perilaku runtuh akan menjadi khusus IDE. Anda harus secara eksplisit menyatakan untuk mana ini berlaku.
jamesdlin
1
Juga, "memanggil kelas" (yang saya anggap maksud Anda "memanggil konstruktor kelas") tidak selalu mengembalikan instance baru dari kelas. Jika Anda memanggil konstruktor pabrik , Anda mungkin mendapatkan kembali instance yang ada . Inilah sebabnya mengapa newtidak disarankan: menggunakannya sepertinya tanpa syarat membuat instance baru padahal mungkin tidak.
jamesdlin