Mengapa konstruktor List () tidak dapat diakses dalam keamanan null Dart?
Dengan NNBD, Anda tidak diizinkan untuk menginisialisasi daftar menggunakan konstruktor default:
List<int> foo = List(); // Compile time error
Namun, Anda tetap dapat melakukan:
List<int> foo = []; // No error
Lantas, apa perbedaan keduanya? Keduanya harus menunjukkan kesalahan atau tidak sama sekali.
Jawaban
The List
konstruktor memiliki dua kegunaan:
new List()
untuk membuat daftar kosong yang bisa dikembangkan, setara dengan[]
.new List(n)
untuk membuat daftar panjang tetap yangn
diisi dengannull
nilai
Dengan keamanan nol, penggunaan kedua seringkali tidak aman, dan tidak ada cara yang baik untuk memperbaikinya. Ini mungkin untuk memaksa tipe argumen untuk menjadi non-nullable, tapi List<T>(4)
hanya bekerja bila T
adalah nullable . Tidak ada cara untuk memaksakan itu.
Jadi, List(n)
mode harus pergi (diganti dengan List.filled(n, value)
yang memaksa Anda untuk memberikan nilai-isi). Kiri itu List()
, yang tidak benar-benar membawa bobotnya sendiri. Anda bisa menggunakan []
saja (dan Anda harus !), Jadi diputuskan untuk menghapus konstruktor seluruhnya - semua penggunaannya tidak aman atau tidak berguna. (Juga, itu adalah konstruktor yang aneh, karena jika kita ingin membuatnya aman dari nol, itu akan memiliki parameter opsional dengan tipe non-nullable dan tanpa nilai default.)
Dengan menghapusnya sepenuhnya, ini memungkinkan untuk, secara potensial, memperkenalkan List
konstruktor baru di masa mendatang, mungkin sebagai alias yang lebih pendek untuk List.filled
. Seseorang bisa berharap.