SORU
18 EKİM 2008, CUMARTESİ


Değişken vs değişmez nesneler

Değişken vs değişmez nesneler etrafında başımı almak için çalışıyorum. Değişken nesneleri kullanarak kötü basın (örneğin, bir yöntem dizeleri bir dizi dönen) bir sürü alır ama sorun olumsuz etkilerinin bu ne anlamakta güçlük çekiyorum. Değişken nesneleri kullanarak en iyi uygulamaları nelerdir? Mümkün olduğunca bunlardan kaçınmak gerekir?

CEVAP
18 EKİM 2008, CUMARTESİ


Peki, bunun birkaç yönü vardır. Birincisi, referans-kimlik olmadan değiştirilebilir nesneler tuhaf zamanlarda hatalar neden olabilir. Örneğin, değer tabanlı equals yöntem: Person fasulye düşünün

Map<Person, String> map = ...
Person p = new Person();
map.put(p, "Hey, there!");

p.setName("Daniel");
map.get(p);       // => null

Person örnek "" hashCode çünkü bir anahtar olarak kullanılan harita ve eşitlik değiştirilebilir değerler üzerine kurulmuştu. içinde kaybolup gidiyor Bu değerleri harita dışında değişti ve karma tüm gereksiz oldu. Teorisyenleri bu nokta üzerinde durmak gibi, ama pratikte bir sorun çok fazla bulamadım.

Diğer bir husus da, mantıklı "reasonability" kodu. Bu, Akış için okunabilirlik her şeyi kapsayan tarif edilmesi zor bir terimdir. Genel olarak, bir kod parçası bakmak gerekir ve kolayca ne yaptığını anlamak. Ama bundan daha önemli, ne yapar kendinizi ikna etmek gerekirdoğru. Nesneleri bağımsız olarak farklı bir kod üzerinde değişiklik yapabilir "" bazen zor nerede ve neden ne izlemek olur ("uzaktan hayalet eylemi"). etki Bunu örneklemek için daha zor bir kavramdır, ama genellikle daha büyük, daha kompleks mimarileri karşı karşıya olan bir şey.

Son olarak, değişken nesnelerdirkatileşzamanlı durumda. Ayrı bir iş parçacığı tarafından değiştirilebilir bir nesne ulaşmak zaman, kilitleme ile uğraşmak zorunda. Bu çıkışını azaltır ve kodunuzu yapardramatikdaha zor korumak için. Yeterince karmaşık bir sistemi korumak için neredeyse imkansız hale gelir bu sorun şimdiye kadar orantısız (hatta eşzamanlılık uzmanlar için) darbeler.

Sabit nesneler (ve özellikle koleksiyon değişmez) tüm bu sorunları önlemek. Nasıl çalıştıklarını etrafında zihin hazır olunca, kodu okumak daha kolay, korumak için daha kolay ve daha az arızalanır olan garip ve beklenmedik şekillerde bir yön alır. Değişmez nesneleri test etmek için daha kolay, sadece kolay kendi mockability nedeniyle, ama aynı zamanda kod desenler uygulamak eğilimindedir. Kısacası, iyi uygulama etrafında toplanmışlar!

Bunu dedi, pek bu konuda fanatik değilim. Bazı sorunlar sadece her şey sabit olduğunda güzel modeli yok. Ama ben de öyle düşünüyorum denemelisin bas olarak çok kodunuzda bu yönde mümkün, varsayarak tabii ki kullanıyorsun bir dil olan yapar bu savunulabilir bir görüş (C/C yapar bu çok zor gibi geliyor Java). Kısacası: avantajları biraz senin sorunun bağlıdır, ama değişmezliğini tanıdı tercih eğiliminde olacaktır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • BurnedInDotCom

    BurnedInDotC

    3 NİSAN 2010
  • Pepsi

    Pepsi

    1 Kasım 2005