Dart'ta "yeni" anahtar kelimesini kullanmanız gerekiyor mu?


95

Dart tabanlı uygulamamda, newanahtar kelimeyi atlayabileceğimi ve her şeyin mükemmel şekilde çalıştığını fark ettim .

Bunun yerine final widget = new Widget();kullanabilirim final widget = Widget();.

Bunun kod üzerinde herhangi bir etkisi var mı?

Yanıtlar:


120

Hayır değil. İle Dart 2 (Daha fazla bilgi ile duyurusu için tıklayın)new ve aynı zamanda constanahtar kelimeler yapılmıştır opsiyonel .

Bu , kendi başına new Widget()aynı şeyi yaptığı anlamına gelir Widget().


constAnahtar kelime, ancak, bir olmaz bir değeri değiştirebilirsiniz constbir örtülü const.
Bu nedenle, gerektiğinde açıkça belirtmeniz gerekecektir const.


6
Dart ekibinin şimdilik biraz geri çekilmesi gerekiyordu ve hala gerekli newveya consthala gerekli olan bazı durumlar var (örnekleri veya kuralları hatırlamıyorum). Dart 2'den sonra her yerde isteğe bağlı hale getirmek için başka bir girişimde bulunabilirler.
Günter Zöchbauer

1
newGerekli olan hiçbir yer yok . newDoğru bir programı atlarsanız , her zaman aynı şekilde çalışmaya devam eder. constÇalışan bir programdan kaldırırsanız , programın geçerli olması için yazmanız gereken çoğu durumda const, program yine de geçerli olacaktır. constİfadeyi zaten çevreleyen bir durum varsa, iç içe yerleştirilmiş sabitleri atlayabilirsiniz.
2018

20

Dart 2'de, bir işlev gibi bir yapıcıyı bir newveya constönünde olmadan çağırırsanız, kullanmaya eşdeğerdir new. Bir sabit çağrı istiyorsanız, o zaman öne koymalısınız const.

Bir const ifadesinin içindeconst tekrar yazmanıza gerek yoktur ve const ifadeleri gerektiren bazı bağlamlarda (büyük / küçük harf geçişleri ve const değişkenlerinin başlatıcıları gibi), dış sabitlere bile ihtiyacınız yoktur.

Yani asla yazmaya gerek yok new.

Dart dili ekibi, bunlardan birini ekleyebileceğiniz newveya constyine de çağrının doğru olmasını sağlayan ifadelere (yani, sabit bağımsız değişkenlere sahip bir const yapıcısı) constyerine ekleme yerine varsayılan olarak izin vermek istiyor new, umarım Dart 2'ye erken bir güncellemede. , Nesnenin yeni bir örnek olması için ihtiyaç duyduğunuz herhangi bir const yapıcısının newönüne yazmanızı öneririm . Bu çok nadir görülen bir durumdur, genellikle değişmez nesnenizin kimliğini önemsemezsiniz (bu yüzden eklemek iyi bir fikir olarak kabul edilir).Object()const



5

newAnahtar kelime daima bu sınıfın yeni bir örneğini döndürür bir sınıf çağıran, şimdi Dart 2. As isteğe bağlı yapıldı. Benim tavsiyeme göre, bunu bir Düzen tanımının dışında kullanabilir ( ZORUNLU DEĞİL ), ancak Düzenler içinde atlayabilirsiniz.

Sizlerle paylaşmak istediğim bir nokta daha , widget'ları bildirirken newveya constanahtar kelimesini kullanırsanız , widget gövde kodunu daraltmak ve genişletmek için kullanabileceğiniz + simgesini de görebileceğinizdir. Bu, aynı dosyada başka bir pencere öğesi kodu üzerinde çalışırken dart dosyasındaki kalan pencere öğesi kodunu daraltmak / gizlemek istediğinizde kullanışlıdır .


Bu çöküş olayını iyi yakalayın
MoGa

2
Çökme davranışı IDE'ye özgü olacaktır. Hangisi için geçerli olduğunu açıkça belirtmelisiniz.
jamesdlin

1
Ayrıca, "bir sınıfı çağırmak" (bununla "bir sınıfın yapıcısını çağırmak" demek istediğinizi varsayıyorum) her zaman sınıfın yeni bir örneğini döndürmez. Bir fabrika kurucusunu çağırırsanız , mevcut bir örneği geri alabilirsiniz . Bu nedenle newcesaret kırılır: Kullanılması koşulsuz olarak göründüğü gibi, olmayabilecek yeni bir örnek oluşturur.
jamesdlin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.