Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Web Geliştirmede `Object.freeze()` ve `Object.seal()` ile Veri Bütünlüğünü Sağlama Rehberi 🔒

asteron

Üye
Katılım
14 Mart 2026
Mesajlar
12
Web Geliştirmede `Object.freeze()` ve `Object.seal()` ile Veri Bütünlüğünü Sağlama Rehberi 🔒

Selam dostlar! 👋 Uzun süredir forumda takılıyorum ve bugün sizlerle, özellikle büyük ölçekli uygulamalar geliştirirken hayat kurtarıcı olabilen ama çoğu zaman gözden kaçan iki JavaScript metodundan bahsetmek istiyorum: `Object.freeze()` ve `Object.seal()`.

Kod yazarken, özellikle ekip çalışmalarında veya state yönetimi yaparken, bazı nesnelerin yanlışlıkla değiştirilmesini istemeyiz. İşte bu iki metot, nesnelerinizi koruma altına alarak beklenmedik mutasyonların (değişikliklerin) önüne geçmenizi sağlar. Gelin bu sihirli anahtarları birlikte inceleyelim. ⚙️

Neden İhtiyaç Duyarız?
Basit bir senaryo düşünelim. Uygulamanızda sabit, değişmeyecek bir yapılandırma (config) nesneniz var veya Redux gibi bir state yönetiminde state'in doğrudan değiştirilmesini engellemek istiyorsunuz. Yanlışlıkla bir property'nin değerini değiştirmek veya yeni bir property eklemek, saatlerce debug etmenize neden olabilir. Bu metodlar, bu tür hataları compile-time değilse bile run-time'da yakalamanıza yardımcı olur.

`Object.seal()`: Mühürleme İşlemi
`Object.seal()` metodu, bir nesneyi "mühürler". Peki bu ne demek?
  • Var olan property'lerin değerleri değiştirilebilir.
  • Ancak nesneye yeni property eklenemez ve var olan property'ler silinemez.
  • Property'lerin yapılandırılabilir (configurable) özelliği `false` olarak ayarlanır.
Kullanımı çok basit:

Kod:
const kullanici = {
    isim: 'Ahmet',
    yas: 30
};

Object.seal(kullanici);

kullanici.yas = 31; // ✅ ÇALIŞIR! Değer değiştirilebilir.
console.log(kullanici.yas); // 31

kullanici.meslek = 'Yazılımcı'; // ❌ ÇALIŞMAZ! Yeni property eklenemez.
delete kullanici.isim; // ❌ ÇALIŞMAZ! Property silinemez.

`Object.isSealed()` metodu ile bir nesnenin mühürlenip mühürlenmediğini kontrol edebilirsiniz.

`Object.freeze()`: Dondurma İşlemi
`Object.freeze()`, `seal()`'den daha katı bir koruma sağlar. Nesneyi tamamen "dondurur".
  • Var olan property'lerin değerleri değiştirilemez.
  • Nesneye yeni property eklenemez.
  • Var olan property'ler silinemez.
  • Ayrıca, property'lerin yazılabilir (writable) ve yapılandırılabilir (configurable) özellikleri `false` olarak ayarlanır.

Kod:
const sabitAyarlar = {
    siteAdi: 'bingunluk.com',
    maxBaglanti: 100,
    bakimModu: false
};

Object.freeze(sabitAyarlar);

sabitAyarlar.bakimModu = true; // ❌ ÇALIŞMAZ! Değer değiştirilemez.
sabitAyarlar.yeniOzellik = 'test'; // ❌ ÇALIŞMAZ! Eklenemez.
delete sabitAyarlar.siteAdi; // ❌ ÇALIŞMAZ! Silinemez.

console.log(sabitAyarlar.bakimModu); // false (Değişmedi!)

`Object.isFrozen()` metodu ile kontrol sağlayabilirsiniz.

Hangisini, Ne Zaman Kullanmalı?
  • `Object.seal()`: Nesnenin şeklinin (property listesi) sabit kalmasını, ancak değerlerin değişebilmesini istediğinizde kullanın. Örneğin, bir form veri modelinin yapısı sabit olsun ama kullanıcı input ile değerleri doldurabilsin.
  • `Object.freeze()`: Nesnenin tamamen değişmez (immutable) olmasını istediğinizde kullanın. Sabit yapılandırmalar, enum benzeri sabit listeleri veya state yönetiminde değiştirilmemesi gereken state parçaları için idealdir. 🚀

Önemli Uyarılar ve Derin Dondurucu 🧊
Bu metodların en büyük sınırlaması sığ (shallow) çalışmalarıdır. Yani, nesnenin içindeki başka nesneler (nested objects) korunmaz.

Kod:
const kutuphane = {
    isim: 'Ana Kütüphane',
    calisanlar: ['Ayşe', 'Mehmet'] // Bu bir dizi (object)
};

Object.freeze(kutuphane);

kutuphane.isim = 'Yeni Kütüphane'; // ❌ Engellendi.
kutuphane.calisanlar.push('Zeynep'); // ✅ ÇALIŞIR! İçteki nesne korunmadı.
console.log(kutuphane.calisanlar); // ['Ayşe', 'Mehmet', 'Zeynep']

Bu sorunu çözmek için, iç içe geçmiş tüm nesneleri rekürsif olarak dondurmanız gerekir. Bunun için kendi helper fonksiyonunuzu yazabilir veya Immer, Immutable.js gibi kütüphaneleri kullanabilirsiniz.

Sonuç
`Object.seal()` ve `Object.freeze()`, JavaScript'te kodunuzun daha tahmin edilebilir, güvenli ve sağlam olmasını sağlayan harika araçlardır. 💻 Özellikle büyük projelerde ve ekip çalışmalarında, yanlışlıkla yapılabilecek değişikliklere karşı bir güvenlik ağı oluştururlar.

Bir sonraki projenizde, değişmemesi gereken bir config nesnesi oluşturduğunuzda, hemen `Object.freeze()`'i hatırlayın! Deneyimlerinizi yorumlarda paylaşmayı unutmayın. İyi kodlamalar! ✨
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri