fka blog journal of programming studies

JavaScript'te Mutable ve Immutable Veri Türleri

Uzun zamandır blog post yazmıyorum; bugün çok basit bir ispat blog postu yazayım dedim. :)

Bir programlama dilinde bir verinin construct olduğu değeri değiştiremiyorsanız bu değere immutable, değiştirebiliyorsanız mutable diyoruz.

var x = "fka";
x[1] = "K";
console.log(x) //=> "fka"

gördüğünüz gibi x değişkeni hiçbir şekilde değişikliğe uğrayamadı.

JavaScript'te iki çeşit veri tipi mutable'dır:

  • Object
  • Array

Diğer veri türleri ise immutable veri türlerine girerler.

  • undefined
  • null
  • Boolean
  • Number
  • String

Bunu ispatlamak için basit bir işlem yapıyoruz:

var x = new Object({0: "f", 1: "k", 2: "a"});
x[1] = "K";

Bu x değerine bakalım:

x.valueOf(); //=> {0: "f", 1: "K", 2: "a"}

Şimdi aynı kodu String fonksiyonu ile yazalım:

var x = new String({0: "f", 1: "k", 2: "a"});
x[1] = "K";

Şimdi x değerinin değiştireceğini düşünsek de immutable olduğu için bu şekilde kaldı.

x.valueOf(); //=> "fka"

Bir objeyi eğer daha sonradan immutable yapmak istiyorsanız Object.freeze kullanabilirsiniz;

var x = {0: "f", 1: "k", 2: "a"};
Object.freeze(x);

x[1] = "K";

x.valueOf(); // {0: "f", 1: "k", 2: "a"};

+=, *=, ... Operatörleri

+= gibi operatörler her ne kadar nesneyi değiştiriyor gibi görünse de aslında yeni bir nesne construct ediyor:

var x = "fka";
x+="dev";
console.log(x); //=> "fkadev"

bu aslında şu şekilde düşünülmeli:

var x = "fka";
x = x + "dev";

daha da açarsak;

var x = "fka";
x = new String(x) + new String("dev");

yani aslında veriyi mutate etmiyor (değiştirmiyor) onu da kullanarak yeni bir primitif değer atıyoruz.

Basit bir bilgi, sadece bu şekilde anlatınca anlaşılması kolay olduğuna inandığım için yazmak istedim. :)