Giriş
Immutable veriyapıları, functional programlama ile iyice popüler olmaya başladılar. Java'da Immutable arayüzler ve veriyapıları yok. Bu gibi şeyler için genellikle harici kütüphanaler kullanılıyor. Eğer Java'da bu yapılar olsaydı muhtemelen şöyle bir hiyerarşimiz olurdu.
Immutable veriyapıları, functional programlama ile iyice popüler olmaya başladılar. Java'da Immutable arayüzler ve veriyapıları yok. Bu gibi şeyler için genellikle harici kütüphanaler kullanılıyor. Eğer Java'da bu yapılar olsaydı muhtemelen şöyle bir hiyerarşimiz olurdu.
ImmutableIterable
____________/ |
/ |
Iterable ImmutableCollection
| _______/ / \ \___________
| / / \ \
Collection ImmutableList ImmutableSet ImmutableMap ...
\ \ \_________|______________|__________ |
\ \___________|____________ | \ |
\___________ | \ | \ |
List Set Map ...
Immutable nesneler derleyici açısından state değiştirse bile kullanıcıya görünmez olduğu müddetçe sorun olmaz.Immutable Nesneler State Paylaşımında Faydalıdır
Açıklaması şöyle. Burada immutable nesne constant gibi düşünülüyor.
The most obvious example is a configuration. You don't want to change it at runtime, but it's often needed by different parts of your code. Something like the current user. You don't want to change it, but will want to share it with different modules.
State paylaşımı concurrent (eş zamanlı) uygulamalarda daha da önemli hale geliyor. Açıklaması şöyle.
That, of course, is much more significant when talking about a multithreaded environment. With immutable objects, you don't have to worry if another thread mutated them, while this thread was using it between such and such lines of code. That makes threading code - again - much easier to reason about.
Java'daki Immutable String ve Integer
State paylaşımındaki benzer açıklamalar geçerli. Açıklaması şöyleImmutability is good because it prevents you from making a change to an object and having that change affect a completely different part of the code which wasn't written with the possibility in mind that the objects it operates on could be changed somewhere else (very little code is really written to cope with that).This is particularly useful with multithreaded code (where a change done by a different thread could happen in between the operations of a single line of code), but even single-threaded code is much easier to understand when methods you call can't change the objects you pass into them.
Immutable ve Builder
Strong Immutable
Şöyle tanımlanıyor.
Java'da Immutable ve Unmodifiable FarkıEnsure that methods can't be overridden by either making the class final (Strong Immutability) or making your methods final (Weak immutability).
Java Collections Framework'te şöyle bir yazı var.
Eğer şöyle kodlarsakCollections that do not support any modification operations (such asadd
,remove
andclear
) are referred to as unmodifiable. [...] Collections that additionally guarantee that no change in the Collection object will ever be visible are referred to as immutable.
Collections.unmodifiableList(java.util.List<? extends T>)
Sadece ilk listemize unmodifiable bir view elde ederiz. Her ne kadar view bizim için salt okunur olsa da altta kullanılan liste değişirse bizim view da değişir.
Hiç yorum yok:
Yorum Gönder