ES6+ ile gelen Symbol veri tipi, JavaScript'te benzersiz anahtarlar oluşturmak için kullanılır Bu yazıda, Symbol kullanımının avantajlarını ve örneklerini detaylıca inceleyeceğiz Öğrenmek için okumaya devam edin

ES6 güncellemesi ile JavaScript'in veri tipi araçlarına eklenen Symbol veri tipi, dilin daha güçlü bir kullanım alanı sağlaması için geliştirildi. Bu yeni veri tipi, özelleştirilebilir ve benzersiz anahtarlar oluşturmak için kullanılır.
Symbol, önceki JavaScript sürümlerinde kullanılan veri tiplerinden farklı bir yapıya sahiptir. Diğer veri tiplerinin aksine, Symbol veri tipi için oluşturulan anahtarlar, diğer anahtarlarla aynı özelliklere sahip olmayan benzersiz özellikleri taşır.
Bu nedenle, Symbol anahtarların kullanımı, işlemleri ve ayırt etme yöntemlerini güçlendirir. Symbol veri tipinin kullanımı daha da geliştirilerek, dilin sınırlarını aşan daha net ve okunaklı bir kodlama altyapısı oluşturulabilir.
Symbol Nedir?
ES6, birçok yenilik getirerek geliştiricilerin işlerini daha da kolaylaştırırken, en dikkat çeken yeniliklerden biri Symbol veri tipi oldu. Peki, Symbol nedir?
Symbol, JavaScript diline ES6 ile birlikte eklenen özel bir veri tipidir. Objelerin özelliklerine erişmek için kullanılan property isimleri string tiplerinde olduğu halde, Symbol veri tipi ile belirteç oluşturulabilmektedir. Bu durum, property çakışmalarını önlemede oldukça faydalı hale gelmektedir.
Symbol oluşturmak için Symbol() fonksiyonu kullanılır. Symbol veri tipi, diğer veri tiplerinden farklı olarak her oluşturulan sembol kendine özgü ve benzersizdir. Yani, bir sembolü aynı şekilde tekrar oluşturmak mümkün değildir.
Symbol veri tipinin bir diğer özelliği ise, for metodu sayesinde global bir Symbol kaydı yapabilmesidir. Bu sayede, farklı yerlerde kullanılacak aynı amaçlı sembolleri global olarak kaydedebilir ve kolayca erişebiliriz.
Özellik | Açıklama |
---|---|
name | Sembol isminin string değerini alır. |
toString() | Sembolün string açıklamasını döndürür. |
Symbol.for() | Global sembol kaydı oluşturur veya mevcut olan bir sembolü getirir. |
Symbol.keyFor() | Sembolün global kaydında bulunduğu ismi döndürür. |
Symbol veri tipinin kullanım alanları oldukça geniştir. Özellikle, property isimleri oluştururken farklı isimlerin kullanılmasına izin verir. Ayrıca, semboller sayesinde JavaScript diline yeni özellikler de kazandırılabilir.
Görüldüğü gibi, Symbol veri tipi, JavaScript diline getirdiği farklılık ve kullanım kolaylığıyla ön plana çıkmaktadır. Bu nedenle, geliştiricilerin bu veri tipini daha detaylı öğrenerek kullanmaları, kod yazım sürelerini kısaltacaktır.
Symbol Örnekleri
Symbol veri tipi, kendine özgü, benzersiz bir değer oluşturmak için kullanılır. Bu nedenle, bir Symbol oluşturduğunuzda, dünyanın herhangi bir yerindeki herhangi bir başka Symbol ile aynı özelliği paylaşmayacaktır.
Symbol, genellikle nesne özelliklerinin isimleri olarak kullanılır, bu özellikler diğer kodlar tarafından gizlenir ve manipüle edilemez. Aynı zamanda, herhangi bir Symbol, diğer değer türleriyle karıştırılması imkansız olan farklı ve benzersiz bir türdür.
Symbol örneğini nasıl oluşturacağınıza bakalım:
```javascriptlet mySymbol = Symbol();```
Önceden bahsedildiği gibi, Symbol oluşturmak için kullanılabilecek bir değere de sahip olabilirsiniz. Aşağıdaki örnekte, 'mySymbol' sembolü olarak kullanılabilir:
```javascriptlet mySymbol = Symbol('besiktas');```
Symbol'ler, objelerin yeni özellikleri olarak kullanılabileceği gibi, aşağıdaki gibi bir dizinin içine yerleştirilerek de kullanılabilir:
```javascriptlet myArray = [1, 2, 3];myArray[Symbol('mySymbol')] = 'sembol kullanımı';console.log(myArray); ```
Tabii ki, String, Number ve Boolean’un aksine, Symbol değerleri bozulamaz. Bir Symbol değeri atanmışsa ve istenirse, bu sadece aynı Symbol örneğiyle ilgili yapılabilir.
Tüm Symbol değerleri, Symbol sınıfının örnekleridir. Ancak, bu örnekler çağrıldığında değiştirilebilir değil. Symbol örnekleri nasıl çağrılacağı aşağıdaki gibidir:
```javascriptconst symbolOne= Symbol('Symbol 1');const symbolTwo= Symbol('Symbol 2');console.log(symbolOne === symbolTwo); //false```
Sonuç olarak, Symbol veri tipi, benzersiz bir değer oluşturmak için kullanılır ve diğer veri türlerinden farklı özellikleri vardır. Objelerin özellikleri olarak ve bir dizi içinde yerleştirilerek kullanılabilecek semboller özelliği, JavaScript'te birçok avantaj sunar.
Global Symbol Registry
ES6+'ın önemli özelliklerinden biri de global Symbol Registry'dir. Bu Registry, herhangi bir yerde, aynı kaynaktan gelen farklı kod parçaları arasında kullanılan aynı sembollerin (Symbol'lerin) paylaşılmasını sağlar. Bu nedenle, global Symbol Registry, Symbol veri tipinin gücünü maksimize eder.
Global Symbol Registry, Symbol'leri global alana kaydeder veya bu alandaki bir Symbol nesnesini almak için kullanılır. Registry, Symbol for _, değerindeki bir adla bir Symbol oluşturulmasına olanak tanır. Bu işlem, Registry’de oluşturulan Symbol nesnesini döndürür. Bu Symbol nesnesi, sınırlı sayıda özel yapısı ve davranışı olan özel bir nesnedir.
Bir Global Symbol Registry olmadan, aynı ad ile farklı Symbol nesneleri oluşturulması veya yönetilmesi zor hale gelebilir. Ayrıca, kodun daha karmaşık hale gelmesine neden olabilir. Symbol nesnelerini yeni bir js özelliği olarak tanımlamak, kaynak kodunun daha tutarlı ve daha okunaklı olmasını sağlar.
Symbol.for() metodu
Symbol.for() yöntemi, global Symbol Registry'de var olan veya olmayan bir simgeye karşılık gelen benzersiz bir simge değeri döndürür. Eğer belirtilen anahtar zaten varsa, o anahtar için mevcut bir simgeyi döndürür. Yeni bir simge oluşturmak istiyorsanız, anahtarın mevcut olmaması gerekiyor.
Symbol.for() yönteminin kullanımı oldukça basittir, yöntem çağrıldığında bir anahtar dizesi sağlanır ve Symbol objesine ait benzersiz bir simge değeri döndürülür. Örneğin;
Symbol.for() Kullanımı |
---|
let s1 = Symbol.for('mySymbol');let s2 = Symbol.for('mySymbol');console.log(s1 === s2); // true |
Görüldüğü gibi, Symbol.for() yöntemi aynı anahtar için her çağrıda aynı simgeyi döndürür ve birden fazla benzer anahtar, aynı simgeye karşılık gelir. Bu nedenle, Symbol.for() yöntemi global Symbol Registry'de yeni bir simge oluşturduğu ve var olan bir anahtar dizesi için önceden oluşturulmuş bir simge döndürdüğü için oldukça yararlıdır.
Symbol.keyFor() metodu
Symbol.keyFor() metodu ile global Symbol Registry'deki bir Symbol'ün adını alabiliriz. Bu işlem için Symbol.keyFor() metodu kullanılır. Bu metoda parametre olarak bir Symbol geçiririz ve bu Symbol'ün adını bize geri döndürür. Eğer Symbol Registry'de böyle bir Symbol yoksa undefined değeri döndürülür.
Örnek olarak:
Kod | Çıktı |
---|---|
const sym1 = Symbol.for('ornek');console.log(Symbol.keyFor(sym1)); | ornek |
const sym2 = Symbol('ornek');console.log(Symbol.keyFor(sym2)); | undefined |
Yukarıdaki örnekte, birinci örnekte 'ornek' adlı Symbol oluşturduk. Bu simgeyi Symbol.for() metoduyla global Symbol Registry'ye ekledik. Daha sonra, Symbol.keyFor() ile bu Simge'nin adını aldık ve 'ornek' çıktısını aldık. İkinci örnekte, 'ornek' adlı bir Symbol oluşturduk, ancak bu kez symbol global Symbol Registry'de olmadığından, Symbol.keyFor() ile undefined sonucunu aldık.
Sembol Kullanım Alanları
Symbol veri tipi, özellikle JavaScript programlama dilindeki uygulamalarda kullanılabilen bir veri tipidir. Symbol veri tipi, benzersiz bir değere sahiptir ve bu nedenle programdaki benzersiz nesnelere referans vermek için kullanılır.
Semboller, özellikle nesne özelliklerinin isimlendirilmesinde kullanılır. Semboller, nesne oluşturulduğunda özelliklerine atanır ve bu özelliklere erişmek için sembol kullanılır. Söz konusu sembol aynı zamanda diğer bir benzersiz sembol için eşdeğer olabilir. Bu nedenle, semboller oldukça güçlü bir veri tipidir.
Symbol veri tipinin bir diğer kullanım alanı ise iteratorlerdir. Iteratorler, belirli bir veri yapısındaki elemanlara erişmek için kullanılır. Diziler, haritalar ve kümeler gibi veri yapıları içindeki elemanlara erişmek için semboller kullanılır.
Örneğin, bir haritadaki her bir elemana sembol eklemek isteyebilirsiniz. Böylece her elemanın değeri benzersiz olacak ve bu değerlere semboller ile erişilebilecektir.
Anahtar | Değer |
---|---|
Symbol("Anahtar 1") | Değer 1 |
Symbol("Anahtar 2") | Değer 2 |
Yukarıdaki örnek, semboller ile harita oluşturma durumunu göstermektedir. Anahtarlar sembol olarak tanımlanırken, her sembol farklı bir değere sahiptir.
Ayrıca, semboller, adlandırılmamış işlevlerde de kullanılır. Sınıfların adlandırılmamış işlevlerinde ve promise'lerin durumlarını belirleyen sembollerde sembol veri tipi kullanılır. Bu nedenle, semboller, JavaScript'in modern özelliklerinden biridir ve geliştiricilerin kullanması önerilir.
ES6+'daki Diğer Yenilikler
ES6 ya da ECMAScript 2015, çok sayıda yenilik ve geliştirmeler içeren bir JavaScript sürümüdür. Bu yeni sürüm, daha iyi verimlilik ve okunabilir kod yazımı gibi faydalar sağlarken, daha önce mevcut olmayan özellikler de içermektedir. İşte ES6 sürümündeki bazı diğer yenilikler ve kısa açıklamaları:
ES6 ile birlikte, let ve const anahtar kelimeleri kullanarak değişkenler oluşturabilirsiniz. Bu, var anahtar kelimesi kullanarak oluşturulan değişkenlerin kullanışsız olduğu durumlarda özellikle faydalıdır. let anahtar kelimesi, blok kapsamı olan değişkenler oluşturmanıza olanak tanırken, const anahtar kelimesi sabit değerler atamanıza olanak tanır.
ES6, lambda veya ok fonksiyonları olarak da adlandırılan yeni ok fonksiyonlarını da sunar. Bu fonksiyonlar, daha kısa ve net kod yazmanıza olanak tanıyarak, özellikle fonksiyonlarınızın okunurluğunu arttırır.
ES6 ile birlikte, template literals olarak adlandırılan yeni bir yazım biçimi sunulur. Bu biçimde, metin içinde değişkenlerin kolayca yerleştirilebileceğini ve ifadelerin daha okunaklı hale geldiğini görürsünüz.
Let ve Const
Let ve const, JavaScript'te var'a alternatif olarak kullanılan değişken tanımlama anahtar kelimeleridir. Let değişkeni, blok kapsamına sahip olduğu için yerel değişkenlerin tanımlanmasını kolaylaştırırken, const değişkeni ise sabit değerleri tanımlamak için kullanılır ve tanımlandıktan sonra değeri değiştirilemez.
Let anahtar kelimesi ile tanımlanan bir değişken, aynı isimde bir değişken tanımlamak için kullanıldığı blok içinde mevcut olan bir değişkeni gölgelemez. Ayrıca, let anahtar kelimesi ile tanımlanan değişkenler hoisting adı verilen bir özelliğe sahip değildir, bu da değişkenin tanımlanmadan önce kullanılmasına izin vermez.
const anahtar kelimesi ise değişkenin bir kez tanımlandıktan sonra tekrar atandığı durumları önler. Bu nedenle, const kullanarak tanımlanan değişkenler genellikle sabit değerleri tanımlamak için kullanılır.
Let ve const anahtar kelimelerinin kullanımı, kodun okunabilirliğini ve bakımını artırır. Özellikle büyük projelerde, değişkenlerin ve sabit değerlerin tanımlanması daha iyi bir yapılandırma ve yönetim için önemlidir.
Ayrıca, let ve const anahtar kelimelerinin yanı sıra, destructuring, spread operatörleri ve default function parametreleri gibi diğer ES6+ özellikleri ile birlikte kullanıldığında, JavaScript geliştiricilerinin kod yazımını daha güçlü ve verimli hale getirebilir.
Arrow Functions
Arrow functions (ok fonksiyonları) ES6+ sürümünde gelen bir fonksiyon yazımı yöntemidir. Bu fonksiyonlar, kısa sözdizimi ve kolay okunabilirliği nedeniyle oldukça popüler hale gelmiştir. Normal fonksiyonlardan farkı, kelime kullanılmadan sadece ok (=>) işareti ile tanımlanmasıdır.
Arrow functions ile fonksiyonlar daha kısa ve anlaşılır bir şekilde yazılabilir. Özellikle tek satırlık fonksiyon tanımlarında oldukça kullanışlıdır. Ayrıca, fonksiyon içinde kullanılabilecek olan this değişkeninin otomatik olarak atanması sayesinde belirli durumlarda hataların önüne geçebilir.
Örnek olarak, normal bir fonksiyon tanımlaması:
```function toplama(a, b) { return a + b;}```
Arrow function kullanarak aynı fonksiyonun kısa ve anlaşılır hali:
```const toplama = (a, b) => a + b;```
Arrow functions ayrıca parametre sayısı durumuna göre farklı kullanımlara da sahiptir. Eğer fonksiyon sadece bir parametre alıyorsa, parantez kullanmadan yazılabilir:
```const kare = x => x * x;```
Eğer fonksiyon birden fazla parametre alıyorsa, parametreler parantez içinde virgülle ayrılır:
```const carpma = (a, b) => a * b;```
Arrow functions genellikle callback fonksiyonlarını kısa ve anlaşılır bir şekilde yazmak için de kullanılır. Örneğin, bir dizi elemanları üzerinde gezinip her elemana 2 katını alan bir örnek:
```const sayilar = [1, 2, 3, 4, 5];const ikiKatSayilar = sayilar.map(num => num * 2);```
Arrow functions ile hem kod blokları kısaltılabilir hem de daha okunaklı bir hale getirilebilir. Bu nedenle, modern web uygulamalarında oldukça sık kullanılan bir yöntemdir.
Template Literals
Template literals, ES6 ile birlikte gelen bir özelliktir. Bu özellik, metinler ve değişkenlerin bir arada daha kolay bir şekilde kullanılmasına olanak tanır. Önceden, bir metin içinde değişken kullanmak için, + işaretiyle metinler ve değişkenler birleştirilirdi.
Örneğin, "Merhaba, benim adım " + name + ", yaşım ise " + age + "'dir." gibi bir kod yazılırdı. Ancak template literals ile bu kod daha kısa ve anlaşılır hale gelir.
Şöyle bir kod yazılabilir: "Merhaba, benim adım ${name}, yaşım ise ${age}'dir.". Template literals içindeki ${} ifadesi, değişkenin değerinin yerleştirileceği yere konulur.
Ayrıca, template literals içinde fonksiyonlar da kullanılabilir. Örneğin, bir yazı tipi ve boyutu belirleyen bir fonksiyonun kullanımı şu şekildedir:
```const font = (size, type) => { return `font-size: ${size}px; font-family: ${type}`;}
console.log(`Bu cümle ${font(16, 'Arial')} olarak yazılır.`);```
Bu kodda font fonksiyonu, boyut ve tip parametrelerini alıp CSS formatında bir string döndürür. Template literals ile bu döndürülen değer kolayca kullanılabilir.
Template literals, özetle, hem kodun daha anlaşılır olmasını sağlar hem de daha kolay ve hızlı bir şekilde değişkenlerin kullanımına olanak tanır.