Immutable ve Mutable Nedir?
Değişmez
değerlere immutable denir. Programlama da bu tanım, tanımladığımız bir değerin değişemeyeceği anlamına gelir. Bunu bir örnekle açıklamak gerekirse:
word
değişkeni tanımlandığında aldığı değer RAM de bir alana yazılır ve değer bu alandan okunur. word
değişkeninin değeri değiştirildiğinde RAM de yeni bir alana yazılır ve değer yeni alandan okunmaya başlar.
Bu yüzden başka bir değişken (cloneWord)
değerini word
değişkeninden aldığında, word
değişkenin değeri değişse bile, kendi değeri aldığı zamanki haliyle kalır.
Fakat JavaScript dili üzerinden gidecek olursak, her veri tipi immutable değildir. Sadece primitive ilkel
veri tipleri immutable özelliğini taşır.
Bu veri tipleri integer
, string
, boolean
, null
ve undefined
tır.
Mutable
Değişebilir
değerlere mutable denir. JavaScript dilindeki mutable veri tipleri Object
, Function
, Class
, Map
ve Set
tir. Bunların immutable değerlerden farkı, değişikliklerde RAM deki alanları değişmez. Bu yüzden bazı tutarsızlıklara açıktır ve kullanırken daha fazla dikkat gerektirir.
Yukarıdaki örnekte cloneObj
değerini, obj
değişkeninin değerinden alır. Daha sonra obj
nesnesinin age
özelliği değiştirildiğinde bundan cloneObj
nesnesi de etkilenir. Çünkü değerlerini RAM deki aynı alandan alırlar ve aynı alanı değiştirirler.
Bu durumu aşmanın JavaScript’te çeşitli yolları vardır. Bu yollar mevcut değeri alarak RAM de yeni bir alana yazılacak hale dönüştürmeyi amaçlar.
Örneğin nesne üzerinden ilerlediğimizde Object.assign
yöntemi kullanılabilir.
ES6 ile daha temiz bir yöntemle spread
operatörü kullanılarak da yapılabilir.
Bunun için önceden geliştirilmiş bazı çözümlerde mevcuttur. Fikir sahibi olmak ve göz atmak isterseniz immutable-js
bu çözümlerden biri.
Happy Coding!
Kaynakça:
Wikipedia — https://en.wikipedia.org/wiki/Immutable_object