ES6 - Sembol

Sembole Giriş

ES6, Symbol adlı yeni bir ilkel tür sunar. JavaScript programlarında meta programlamanın uygulanmasına yardımcı olurlar.

Sözdizimi

const mySymbol = Symbol()
const mySymbol = Symbol(stringDescription)

Bir sembol, içinde bazı verileri saklayabileceğiniz bir hafıza parçasıdır. Her sembol, farklı bir hafıza konumuna işaret edecektir. Bir Symbol () yapıcısı tarafından döndürülen değerler benzersiz ve değişmezdir.

Misal

Bunu bir örnekle anlayalım. Başlangıçta, açıklaması olmayan iki sembol ve ardından aynı açıklamaya sahip semboller oluşturduk. Her iki durumda da eşitlik operatörü, semboller karşılaştırıldığında yanlış döndürür.

<script>
   const s1 = Symbol();
   const s2 = Symbol();
   console.log(typeof s1)
   console.log(s1===s2)
   const s3 = Symbol("hello");//description
   const s4 = Symbol("hello");
   console.log(s3)
   console.log(s4)
   console.log(s3==s4)
</script>

Yukarıdaki kodun çıktısı aşağıda belirtildiği gibi olacaktır -

symbol
false
Symbol(hello)
Symbol(hello)
false
Sr.No Özellik ve Açıklama
1 Symbol.for (anahtar)

verilen anahtarla bir sembol kayıt defterindeki mevcut sembolleri arar ve bulursa onu döndürür. Aksi takdirde, bu anahtarla genel sembol kayıt defterinde yeni bir sembol oluşturulur.

2 Symbol.keyFor (sym)

Verilen sembol için genel sembol kayıt defterinden paylaşılan bir sembol anahtarı alır.

Sembol ve Sınıflar

Sınıftaki özellikleri tanımlamak için sınıflarla birlikte bir sembol kullanılabilir. Avantaj, özellik aşağıda gösterildiği gibi bir sembol ise, özelliğe paketin dışından ancak sembol adı biliniyorsa erişilebilmesidir. Dolayısıyla, semboller özellik olarak kullanıldığında veriler daha çok kapsüllenir.

Misal

<script>
   const COLOR = Symbol()
   const MODEL = Symbol()
   const MAKE = Symbol()
   class Bike {
      constructor(color ,make,model){
      this[COLOR] = color;
      this[MAKE] = make;
      this[MODEL] = model;
   }
}
let bike = new Bike('red','honda','cbr')
console.log(bike)
//property can be accessed ony if symbol name is known
console.log(bike[COLOR])
</script>

Yukarıdaki kodun çıktısı aşağıda belirtildiği gibi olacaktır -

Bike {Symbol(): "red", Symbol(): "honda", Symbol(): "cbr"}
red