HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

Ruby günlüğü - gün 10

Ruby'de sözlükler (hash) oldukça geniş alanlarda kullanılabilirler. Bunu Python'da tecrübe etmiştim. Dizilerden bazı anlarda daha maharetli olacaklardır. Dizileri en basit anlamıyla, nesneler grubu olarak tanımlayabiliriz, sözlükler için de aslında bu tanım yanlış olmayacaktır. Diziler, nesnelerin tanımlanmış bir sırada ve biçimde toplu halde bulunmasıdır, hash yani sözlüklerde ise durum biraz daha farklı. Sözlükler dizilerden farklı olarak anahtar-değer mantığı ile çalışır.

sozluk = {'isim' => 'Mustafa Serhat', 'nick' => 'msdundar'}

Burada 2 adet sözlük öğemiz var. Bir tanesi isim diğeri ise nick. Bu öğeler (yani anahtarlar - key), karşılarında ki değere (value) sahip.

Herhangi bir değeri döndürmek için dizilerde olduğu gibi köşeli parantez kullanırız:

sozluk = {'isim' => 'Mustafa Serhat', 'nick' => 'msdundar'}
puts sozluk['isim']
> Mustafa Serhat

Herhangi bir değeri değiştirken yine dizilerde olduğu gibi assignment yaparız.

sozluk = {'isim' => 'Mustafa Serhat', 'nick' => 'msdundar'}
sozluk['isim'] = "Mustafa Serhat Dundar"
puts sozluk['isim']

Sözlüklerin kullanım alanı çok geniştir demiştim. Sözlüklerde anahtar ve değerler istediğimiz veri tipinde olabilir. Bir diziyi, bir sözlüğe anahtar veya değer yapabiliriz, veya başka bir sözlüğü değer-anahtar yapabiliriz.

Sözlük Elemanları Iterasyonu

Daha önce pek çok iterasyon örneği görüştük, şimdi bunu sözlüklerde uygulayalım.

sozluk = {"sayi1" => 21, "sayi2" => 24}
sozluk.each { |x,y| puts "#{x}'in degeri #{y}'dir"  }
sayi1'in degeri 21'dir
sayi2'in degeri 24'dir

Bu örnekte, sözlüğümüzün anahtar bileşenini x değişkenine eşitledik, değer bileşenini ise y değişkenine eşitledik. Daha sonra interpolate ederek x ve y değişkenlerini kullandık. Interpolation, stringler içerisinde Ruby kodları çalıştırmaya verdiğimiz isimdi.

Anahtarlar - Değerler

Sözlüğün anahtarlarını veya değerlerini ekrana bastırmak oldukça basit iki metodla yapılıyor.

sozluk = {"sayi1" => 21, "sayi2" => 24}
puts sozluk.keys.join(' ve ')
> sayi1 ve sayi2
puts sozluk.values.join(' ve ')
> 21 ve 24

Sözlüklerden eleman silmekte oldukça basittir.

sozluk = { "sayi1" => 21, "sayi2" => 24, "sayi3" => 29 }
sozluk.delete("sayi1")
puts sozluk.keys

delete metoduna oldukça benzeyen bir başka metod ise delete_if metodudur. İsminden anlaşılacağı üzere, şartlı silme işlemi yapar.

sozluk = {"sayi1" => 21, "sayi2" => 24, "sayi3" => 29}
sozluk.delete_if { |x,y| y < 26  }
puts sozluk.keys

Daha önce söylediğimiz şu cümleleri tekrar edelim:

Sözlüklerde anahtar ve değerler istediğimiz veri tipinde olabilir. Bir diziyi, bir sözlüğe anahtar veya değer yapabiliriz, veya başka bir sözlüğü değer-anahtar yapabiliriz.

Sözlükler esnek yapıları sayesinde büyük projelerde ve geniş çaplı işlerde bizim için kullanışlı olur. Ruby'nin pure-object-oriented olması ve dolayısıyla herşeyin bir nesne olması bize bu imkanı sunar.

Sözlük içinde sözlük ve sözlük içinde dizi, sözlük içerisinde string gibi bir kaç durum için geniş bir örnek yapalım :

insanlar = {
  'serhat' => {
    'isim' => 'Mustafa Serhat',
    'yas' => 21,
    'cinsiyet' => 'Erkek',
    'bildikleri' => ['Python', 'VisualBasic', 'PHP']
  },
  'nursah' => {
    'isim' => 'Nursah',
    'yas' => '23',
    'cinsiyet' => 'kadin'
  }
}

puts insanlar['serhat']['bildikleri'].join(' & ')
> Python & VisualBasic & PHP
puts insanlar['nursah']['isim']
> Nursah
puts insanlar['nursah'].inspect
> { "isim" => "Nursah", "yas" => "23", "cinsiyet" => "kadin" }

Başarılar.


Share this post!


Blog Comments powered by Disqus.