6 Mart 2016 Pazar

ES6 Map + Set + WeakMap + WeakSet nedir? Nasıl kullanılır?

  Ahmet Şimşek       6 Mart 2016 Pazar

Bu yazımızda javascript e ES6 ile dahil edilen 4 farklı veri yapısını göreceğiz.

Map

Map veri yapısı ile belirli anahtarlara göre değerler ekleyerek bu değerleri belirlediğimiz anahtarla çekme yada silme gibi işlemleri yapabiliyoruz.

map.set ve map.get

map.set ile isim anahtarına ahmet değerini atadık. ve map.get ilede isim anahtarı ile değere ulaştık.

let map = new Map();
map.set('isim','ahmet');
console.log(map.get('isim'));

çıktı:
ahmet

Tanımlanmamış bir değer çağırıldığından undefined olarak döner.

let map = new Map();
console.log(map.get('isim'));

çıktı:
undefined

map.has ve map.delete

Bir verinin olup olmadığının kontrolünü anahtar değeri ile map.has ile yapıyoruz. Bir veriyi silme işlemini ise anahtar değerini vererek map.delete ile yapıyoruz.

let map = new Map();
map.set('isim','ahmet');
console.log(map.has('isim'));

çıktı:
true

let map = new Map();
map.set('isim','ahmet');
map.delete('isim');
console.log(map.has('isim'));

çıktı:
false

map.size ve map.clear

map.size ile Map içerisinde tanımlanan veri sayısını görebiliyoruz. map.clear ile Map içerisindeki tüm verileri silebiliyoruz.

let map = new Map();
map.set('meyve','elma');
map.set('sebze','biber');
console.log(map.size);

çıktı:
2

let map = new Map();
map.set('meyve','elma');
map.set('sebze','biber');
map.clear();
console.log(map.size);

çıktı:
0

Bir Map içerisine verileri değişkene atanması anında atayabiliyoruz.

let map = new Map([
    ['meyve','elma'],
    ['sebze'  ,'biber']
]);

console.log(map.size);

çıktı:
2

Bir Map de anahtar değeri string dışında object,function yada NaN olan bir veride olabilir.

const object = {};
const func = () => 1;
const nan = NaN;
const num = 1;

let map = new Map([
    [object,'object'],
    [func  ,'function'],
    [nan ,'NaN'],
    [num,'number']
]);

console.log(map.get(object));
console.log(map.get(func));
console.log(map.get(nan));
console.log(map.get(num));

çıktı:
object
function
NaN
number

map.keys,map.values ve map.entries

Bir Map in anahtar değerlerini çekmek istiyorsak .keys fonksiyonunu for..of ile çağırarak görebiliriz.

const object = {};

const func = () => 1;
const nan = NaN;
const num = 1;

let map = new Map([
    [object,'object'],
    [func  ,'function'],
    [nan ,'NaN'],
    [num,'number']
]);

for(let key of map.keys())
    console.log(key);

çıktı:
{}
() => 1
null
1

Map in değerlerine erişmek istiyorsak .values fonksiyonunu kullanıyoruz.

const object = {};
const func = () => 1;
const nan = NaN;
const num = 1;

let map = new Map([
    [object,'object'],
    [func  ,'function'],
    [nan ,'NaN'],
    [num,'number']
]);

for(let value of map.values())
    console.log(value);

çıktı:
object
function
NaN
number

Bir Map in hem anahtar hem değerine erişmek istiyorsak .entries fonksiyonunu kullanıyoruz.

const object = {};
const func = () => 1;
const nan = NaN;
const num = 1;

let map = new Map([
    [object,'object'],
    [func  ,'function'],
    [nan ,'NaN'],
    [num,'number']
]);

for(let [key,value] of map.entries())
    console.log(key + ' ' + value);

çıktı:
{} object
() => 1 function
NaN nan
1 number

let [key,value] önceki yazılarda gördüğümüz veri tanımlama ile bir özellik. let entry şeklinde tanımlayıp entry[0] ve entry[1] şeklinde erişerekde kullanabiliriz.

WeakMap

WeakMap Map in .get,.set,.has ve .delete fonksiyonlarını destekler. Ancak anahtar değer olarak sadece object,function ve NaN gibi verileri kabul eder.

let map = new WeakMap();
const object = {};
map.set('object',{});

gibi bir tanımlama hata ile sonuçlanır.

let map = new WeakMap();
const object = {};
map.set(object,'object');
console.log(map.get(object));

çıktı:
object

Set

Set benzersiz değerlerin bir arada tutulabildiği bir veri yapısıdır.

Set.add ve Set.has

let s = new Set();
s.add(1);
s.add(2);
console.log(s.has(3));

çıktı:
false

.add ile Set e yeni bir veri ekliyoruz .has fonksiyonu ile parametre olarak belirttiğimiz verinin Set içerisinde olup olmadığını kontrol ediyoruz.

Set.delete,Set.size ve Set.clear

let s = new Set();

s.add(1);
s.add(2);
s.delete(2)
console.log(s.size);

çıktı:
1

.delete ile Set içerisindeki bir veriyi silebiliyor ve .size ile Set içerisindeki veri sayısını görebiliyoruz.

let s = new Set();
s.add(1);
s.add(2);
s.clear();
console.log(s.size);

çıktı:
0

.clear fonksiyonu ile Set içerisindeki verileri siliyoruz.

Set içindeki verileri for..of ile listeleyelim.

let s = new Set();
s.add(1);
s.add(2);
s.add(3);

for(let value of s)
    console.log(value);

çıktı:
1
2
3

.forEach ilede değerlere erişebiliyoruz.

let s = new Set();
s.add(1);
s.add(2);
s.add(3);

s.forEach(() => console.log(value));

Yukarıda Map veri yapısı için bahsettiğimiz .keys,.values ve .entries fonksiyonları Set içinde kullanılabiliyor.

WeakSet

WeakSet tıpkı WeakMap gibi sadece object,function ve NaN gibi verileri kabul ediyor. Set in  .add,.delete ve .has fonksiyonlarını destekliyor.

const func = () => 1;
const object = {};

let s = new WeakSet();
s.add(func);
s.add(object);

console.log(s.has(func));

çıktı:
true

WeakSet veri yapısında WeakSet e aktarılan değişkenler tanımlı oldukları için bir döngü ile çağırılmalarına gerek duyulmaz. .has ile verinin WeakSet içerisinde olup olmadığı kontrol edilir mevcut ise çağırılır.

Bu yazımızda Map,Set,WeakMap ve WeakSet veri yapılarından basit örnekler ile bahsettik. Sonraki yazıda görüşmek üzere.
logoblog

Thanks for reading ES6 Map + Set + WeakMap + WeakSet nedir? Nasıl kullanılır?

Previous
« Prev Post

Hiç yorum yok:

Yorum Gönder