List () yapıcısına neden Dart'ın boş güvenliğinde erişilemiyor?
NNBD ile, varsayılan kurucuyu kullanarak listeyi başlatmanıza izin verilmez:
List<int> foo = List(); // Compile time error
Ancak yine de yapabilirsiniz:
List<int> foo = []; // No error
Öyleyse, ikisi arasındaki fark nedir? Ya her ikisi de hatayı göstermeli ya da hiçbirini göstermemelidir.
Yanıtlar
ListYapıcı iki kullanımını vardı:
new List()büyütülebilir boş bir liste oluşturmak için[].new List(n)değerlerlendolu sabit uzunlukta bir uzunluk listesi oluşturmak içinnull
Boş güvenlik ile, ikinci kullanım çoğu zaman sağlam değildi ve bunu düzeltmenin iyi bir yolu yoktu. Bu olmayan null olmak için bir tür bağımsız değişkeni zorlamak mümkün, ama List<T>(4)yalnızca çalışır Tolduğunu null . Bunu uygulamanın hiçbir yolu yok.
Bu nedenle, List(n)gitmesi gereken mod ( List.filled(n, value)sizi bir dolgu değeri sağlamaya zorlayan ile değiştirilir ). O sol List(), aslında kendi ağırlığını taşımıyor. Bunun []yerine kullanabilirsiniz (ve yapmalısınız !), Bu nedenle kurucunun tamamen kaldırılmasına karar verildi - tüm kullanımları ya güvensiz ya da yararsızdı. (Ayrıca, zaten garip bir kurucuydu, çünkü onu düzgün bir şekilde null güvenli hale getirmek isteseydik, null yapılamayan tipte isteğe bağlı bir parametreye sahip olacak ve varsayılan değeri olmayacaktı.)
Tamamen kaldırarak List, gelecekte muhtemelen daha kısa bir takma ad olarak yeni bir kurucu tanıtmayı mümkün kılar List.filled. Umut edilebilir.