SORU
7 Mart 2009, CUMARTESİ


Değişmezliğini tanıdı nedir ve neden bu konuda endişelenmeli miyim?

Değişmezliğini tanıdı üzerine birkaç makale okudum ama hala bu kavramı çok iyi takip etme.

Değişmezliğini tanıdı bahsedilen burada son zamanlarda bir iplik yaptım, ama bu başlı başına bir konu olduğu için, özel bir iş parçacığı yapıyorum.

Değişmezliğini tanıdı bir nesne salt okunur yapma ve düşük görüş verme süreci olduğunu düşündüğüm son iplik bahsettim. Başka bir üye gerçekten bununla bir ilgisi yoktu " dedi. This page (series bir parçası) değişmez sınıf/yapı ve kullandığı salt okunur ve diğer kavramlar örnek kilitlemek için kullanır.

Tam olarak bu örnek durumda devletin tanımı nedir? Devlet gerçekten anlayabiliyorum yok olan bir kavramdır.

Tasarım Klavuzu bir bakış açısıyla, değişmez bir sınıf kullanıcı girişi kabul etmeyen biri olmalı ve gerçekten sadece değerlerini döndürecektir?

Benim anladığım sadece bilgi veren herhangi bir nesne değişmez ve "aşağı", değil mi? kilitli Eğer böyle bir yöntem ile özel bir sınıfta geçerli saati iade etmek istiyorsam, bu tür bir başvuru çalışacak ve böylece değişmezliğini tanıdı ben fayda olarak başvuru türü kullanmalıyım.

CEVAP
8 Mart 2009, Pazar


Değişmezliğini tanıdı nedir?

  • Değişmezliğini tanıdı öncelikle nesnelere uygulanır (dizeleri, diziler, özel Hayvan bir sınıf)
  • Eğer bir sınıfın değişmez bir sürümü varsa, genellikle değişken bir versiyonu da mevcut. Örneğin, Objective-C ve Kakao NSString bir sınıf (değişmez) ve NSMutableString bir sınıf tanımlayın.
  • Eğer bir nesne değişmez ise, (temelde salt okunur) oluşturulduktan sonra değiştirilemez. Bunu aklına "sadece kurucu nesneyi değiştirebilir.

Bu doğrudan kullanıcı giriş ile bir ilgisi yok; bile kodunuz değişmez bir nesnenin değeri değiştirilebilir. Ancak, her zaman yeni ve değişmez bir nesne yerine oluşturabilirsiniz. Burada yalancı bir örnek; birçok dilde sadece myString = "hello"; do not aşağıda yaptığım gibi bir kurucu kullanmak yerine, ama netlik için ben dahil:

String myString = new ImmutableString("hello");
myString.appendString(" world"); // Can't do this
myString.setValue("hello world"); // Can't do this
myString = new ImmutableString("hello world"); // OK

Sana söz "sadece bilgi veren bir nesne"; bu otomatik olarak değişmezliğini tanıdı için iyi bir aday yapmaz. Sabit nesneler hep birlikte inşa ettikleri aynı değeri döndürmek eğilimindedir, şimdiki zaman değiştirdiği için ideal sık olmaz demek durumundayım. Ancak, belirli bir zaman damgası ile oluşturulur ve gelecekte bir zaman damgası her zaman döndüren MomentOfTime bir sınıf olabilir.

İmmutabilty faydaları

  • Eğer başka bir işlev/yöntem için bir nesneye başarılı olursa, o nesnenin işlevini verir, sonra aynı değere sahip olup olmadığı hakkında endişelenmenize gerek yok. Örneğin:

    String myString = "HeLLo WoRLd";
    String lowercasedString = lowercase(myString);
    print myString   " was converted to "   lowercasedString;
    

    Eğer lowercase() uygulanması küçük bir sürümünü yaratmak gibi hoşgeldiniz değiştirdiyse? Üçüncü satırı senin istediğin sonucu vermez. Tabii ki, lowercase() iyi bir fonksiyon bunu yapmaz, ama eğer hoşgeldiniz değişmez ise bu aslında garanti ediyoruz. Gibi sabit nesneler iyi nesne yönelimli programlama uygulamaları uygulamak yardımcı olabilir.

  • Kolay değişmez bir iş parçacığı için güvenli nesne yapmak için

  • Potansiyel olarak sınıfı uygulaması güzel bir sınıf yazıyorsanız () kolaylaştırır

Devlet

Eğer bir nesnenin örnek değişkenleri için ve kağıt üzerinde değerleri yazmak için olsaydı, o an o nesnenin durumu. Program durumu göz önüne alındığında, bir anda tüm nesneleri halidir. Devlet hızla zamanla değişir; bir programı çalıştırmaya devam etmek amacıyla durumu değiştirmek gerekiyor.

Sabit nesneler, ancak, zaman içinde sabit bir devlet var. Bir kez oluşturulan, değişmez bir nesnenin durumunu bir bütün olarak programın devlet olsa da değişmez. Bu daha kolay oluyor takip (ve yukarıdaki diğer faydalar) tutmak için yapar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • Jared Busch

    Jared Busch

    25 Mayıs 2011
  • Marques Brownlee

    Marques Brow

    21 Mart 2008