# Değişmezlik

Adres: https://softwaredictionary.org/tr/terimler/immutability
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
İngilizcesi: Immutability
Okunuşu: imyutıbiliti

Kısaca: Değişmezlik, bir değerin oluşturulduktan sonra değiştirilememesi demektir; her güncelleme, orijinali yerinde değiştirmek yerine yeni bir değer üretir.

## Değişmezlik (immutability) nedir?

Değişmezlik, oluşturulduktan sonra değiştirilemeyen verilerin özelliğidir. Farklı bir değer istiyorsanız yeni bir tane oluşturursunuz ve orijinal olduğu gibi kalır. Bazı değerler çoğu dilde değişmezdir: örneğin Java, Python ve JavaScript'teki dizeler yerinde düzenlenemez, dolayısıyla her “değişiklik” yeni bir dize döndürür.

Diller değişmezliği farklı yollarla destekler. Bazıları bunu varsayılan yapar; Haskell, Elixir, Erlang ve Clojure'da olduğu gibi veri yapıları asla değiştirilmez. Diğerleri ise seçenek olarak sunar: Java'da `final`, Kotlin'de `val`, TypeScript'te `readonly`, Python'da demetler (tuple) ve dondurulmuş dataclass'lar, JavaScript'te `Object.freeze`. Kopyalamayı ucuz tutmak için fonksiyonel diller, her şeyi çoğaltmak yerine eski ve yeni sürüm arasında değişmeyen kısımları paylaşan kalıcı veri yapıları (persistent data structures) kullanır.

Basılı bir fiş iyi bir benzetmedir: bir kez basıldıktan sonra kimse toplamı silmez; bir şey değişirse yeni bir fiş düzenlenir ve eskisi güvenilir bir kayıt olarak kalır. Değişmez verileri anlamak daha kolaydır, çünkü programın başka hiçbir bölümü onları sizin arkanızdan değiştiremez ve kilit kullanmadan iş parçacıkları arasında paylaşılabilirler. React gibi kullanıcı arayüzü kütüphaneleri değişiklikleri hızla saptamak için buna dayanır, çünkü yeni bir nesne bir şeyin değiştiği anlamına gelir.

Değişmezlik sıklıkla sabitlerle karıştırılır. JavaScript'te `const` yalnızca bir değişkenin yeniden atanmasını engeller; işaret ettiği nesne yine de değiştirilebilir, bu yüzden `const user = {}; user.name = "Ada";` sorunsuz çalışır. Gerçekten değişmez bir değer ise hiçbir değişken aracılığıyla değiştirilemez.

## Önemli noktalar

- Değişmez bir değer oluşturulduktan sonra asla değişmez; güncellemeler yeni değerler üretir.
- Değişmez veriler fonksiyonlar ve iş parçacıkları arasında güvenle paylaşılabilir.
- Fonksiyonel diller değişmezliği varsayılan yapar ve kopyaları ucuz tutmak için kalıcı veri yapıları kullanır.
- JavaScript'in `const` gibi sabit bir bağlama, değişmez bir değerle aynı şey değildir.

## Örnek: Değişmez verileri kopyalayarak güncellemek

```javascript
const user = Object.freeze({ name: "Ada", role: "dev" });

// user.role = "admin"; // ignored (throws in strict mode)

// Instead of changing user, create an updated copy
const promoted = { ...user, role: "admin" };

console.log(user.role);     // "dev"   (original untouched)
console.log(promoted.role); // "admin"
```

## Sık sorulan sorular

**JavaScript'te `const` ile değişmezlik aynı şey midir?**

Hayır. `const` değişkenin yeniden atanmasını engeller, ancak işaret ettiği nesne ya da dizi yine de değiştirilebilir. Nesnenin kendisindeki değişiklikleri durdurmak için sığ (shallow) olan `Object.freeze` kullanın ya da nesneleri değiştirmek yerine her zaman yeni nesneler oluşturan bir stil izleyin.

**Değişmez veriler yavaş mıdır?**

Her değişiklikte büyük bir yapıyı kopyalamak yavaş olurdu, ancak çoğu değişmez tasarım tam kopyalardan kaçınır. Kalıcı veri yapıları değişmeyen kısımları sürümler arasında paylaşır; bu yüzden ek yük genellikle önlediği hatalara kıyasla küçüktür.

**Değişmezlik eşzamanlılığa neden yardımcı olur?**

Yarış durumları, iş parçacıkları aynı veriyi aynı anda değiştirdiğinde oluşur. Veri asla değişemiyorsa iş parçacıkları onu kilitsiz özgürce okuyabilir, çünkü çakışacak bir şey yoktur.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
