SORU
11 Ocak 2011, Salı


İlan için dezavantajları dava sınıfları Scala nedir?

Eğer güzel, değişmez veri yapıları çok kullanıyor bu kod yazıyorsanız, dava sınıfları bir nimettir olarak, sadece tek bir kelime ile: ücretsiz aşağıdaki vermenin görünür

  • Her şey varsayılan olarak değişmez
  • Alıcılar otomatik olarak tanımlanmış
  • () İyi olabilirdi uygulanması
  • Uyumlu() equals ve hashCode()
  • Arkadaşı uygulamayı kaldırma ile nesne() eşleştirmek için bir yöntem

Ama durum bir sınıf olarak değişmez bir veri yapısı tanımlama dezavantajları nelerdir?

Kısıtlamaları sınıf ya da müşterileri üzerinde yeri nedir?

Non-örnek bir sınıf tercih etmelisiniz durumlar var mı?

CEVAP
11 Ocak 2011, Salı


İlk iyi bit:

Her şey varsayılan olarak değişmez

Evet, ve hatta eğer ihtiyacınız varsa geçersiz (var)

Alıcılar otomatik olarak tanımlanmış

val ile isime parametreler ile herhangi bir sınıfta mümkün

toString() Uygulama iyi

Evet, çok yararlı, ama herhangi bir sınıf üzerinde elle yapılabilir gerekirse

equals() hashCode() uyumlu

Kolay desen eşleştirme ile birlikte, bu insanlar dava sınıfları kullanan ana nedenidir

Arkadaşı eşleştirme için unapply() yöntemi ile nesne

Ayrıca presi kullanarak herhangi bir sınıf üzerinde elle yapmak mümkün

Bu liste de uber-güçlü kopyalama yöntemi, Scala 2.8 gelmek için en iyi şeylerden biri de içermelidir


O zaman kötü, sadece durum sınıfları ile gerçek bir kısıtlama bir avuç vardır:

Arkadaşı nesnenin derleyici tarafından oluşturulan bir yöntem olarak aynı imza kullanarak apply tanımlayabilirsiniz

Uygulamada olsa da, bu nadiren bir sorun. Değişen davranış oluşturulan geçerli yöntem olduğunu garanti sürpriz kullanıcıların olması kesinlikle önerilmez, tek gerekçe için ne kadar çok olduğunu doğrulamak için girdi parametreleri - bir görevin en iyi yapılmasını ana kurucu gövdesi (da yapar doğrulama kullanılabilir kullanırken copy)

Alt edemezsin

Hala durumda bir sınıfı kendi soyundan olması mümkün olsa da doğru. Ortak bir desen özellikleri bir sınıfın, ağacın yaprak düğümleri olarak dava sınıfları kullanılarak inşa etmektir.

Ayrıca değer sealed değiştirici kaydetti. Bu değiştirici bir özelliği de, herhangi bir alt sınıfıgerekiraynı dosya içinde ilan edilecek. Desen eşleştirme özelliği örneklerini karşı, derleyici o zaman eğer mümkünse beton sınıfları için kontrol etmedin diye uyarabilir. Durum sınıfları ile birlikte bu uyarı olmadan derler eğer kodunuzda güven düzeyi çok yüksek bir düzeyde sunmak.

Ürünün bir alt sınıf olarak, dava sınıflar 22'den fazla parametre var

Gerçek bir çözüm, birçok kullanımı olan bu: dersleri kötüye durdurmak için hariç)

Ayrıca...

Bir diğer kısıtlama bazen dikkat Scala (şu anda) tembel parametreler (parametre olarak lazy vals gibi, ama) desteklemiyor. Bu geçici çözüm tarafından-adı param kullanın ve yapıcı tembel bir val atamak için. Tatili olarak ne yazık ki, adı parametreler tekniği dava sınıfları ile kullanılan engelleyen desen eşleştirme ile karışmaz derleyici tarafından oluşturulan çıkarıcı.

Bu ise son derece işlevsel tembel veri yapıları uygulamak istiyorsanız ilgili, umarım Scala, gelecekteki bir sürüm için tembel parametreler ilavesi ile çözülür.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • infiniTuts

    infiniTuts

    18 Ocak 2012
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008