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

Ruby günlüğü - gün 9

Ruby'de basit bir dizi şöyle tanımlanır;

dizi = [1,2,3,4,5,6]

Dizinin elemanlarını, dizide ki yerine göre ekrana yazdırırız;

puts dizi[3]
> 4

Sonuç 4 olacaktır. Çünkü bir çok programlama dilinde karşılaşmış olacağınız üzere, programlama dillerinde sayım işlemine 0'dan başlanır.

Dizi elemanları için atama ve elemanı değiştirme işlemi aynı yöntemle yapılır, assignment ifadesi ile olan = ile atamam ve güncelleme yaparız.

dizi[5] = 12

Daha önce 6 olan değer, artık 12 oldu. Boş bir dizi tanımlayalım:

bos = []

Bu boş dizinin sonuna elemanlar eklemek için << ifadesini kullanabiliriz;

bos << "yeni_eleman"

Başka programlama dillerinde tecrübe ettiğiniz özellikleri Ruby'de deneyebilirsiniz. Örneğin ben Python'da dizinin son elemanının n[-1] ile temsil edildiğini biliyorum ve bunu Ruby'de denedim, çalıştı.

Son ve ilk eleman için özelleştirilmiş metodlarda bulunmakta. Örneğin dizi.first => ilk elemanı verir ve dizi[0] ile eşdeğerdir. dizi.last => son elemanı verir ve dizi[-1] ile eşdeğerdir.

Peki ya ilk üç elemanı veya son üç elemanı yazdırmak istersek?

dizi = ["Mustafa", "Serhat", "Dundar", 21, 1989]
puts dizi.first(2).join(" ") # Ilk iki eleman
puts dizi.last(3).join(" ") # Son uc eleman

Alternatif olarak push metodu da kullanılabilir.

x.push("yeni_eleman")

Popping yani son elemanı diziden çıkarma, Python çalışmış olanların aşina olduğu bir durum olmalı, dizinin son elemanını diziden atılmasıdır.

pop isimli metod bu işi yapar;

dizi = []
dizi << "eleman1"
dizi << "eleman2"
dizi << "eleman3"
dizi << "eleman4"
puts dizi
dizi.pop
puts dizi

Son elemanın atılmış olduğunu görebilirsiniz.

String'de görmüş olduğunu lenght metodu, diziler içinde geçerli ve dizinin uzunluğunu bize bildirir.

Python'dan anımsanabilecek bir metod daha var, join. join tek başına kullanılabildiği gibi, yanına bir parametre alarakta kullanılabiliyor.

Parametresiz;

x = ["Mustafa", "Serhat", "Dundar"]
puts x.join
MustafaSerhatDundar

Parametreyle;

x = ["Mustafa", "Serhat", "Dundar"]
puts x.join(', ')
Mustafa, Serhat, Dundar

Stringleri Dizi Elemanı Olarak Bölme

Stringin tüm elemanlarını parçalayarak diziye ekleyelim;

x = "Mustafa Serhat Dundar".scan(/\w/).join(', ')
puts x
> M, u, s, t, a, f, a, S, e, r, h, a, t, D, u, n, d, a, r

Daha büyük parçalar halinde bu stringi kelimelere ayırmak için;

x = "Mustafa Serhat Dundar".split(/ /)
puts x
> ["Mustafa", "Serhat", "Dundar"]

Burada önemli bir nokta, split'in içerisinde ki " " (boşluk) karakteri. Boşluk karakteri ile string'i bölme ve dizi elemanı olarak tanımlama işleminin boşluk karakteri esas alınarak yapılacağını belirttik. Dolayısıyla sonuç; "Mustafa", "Serhat", "Dundar" olacaktır.

Ayrıca biz düzenli ifade olarak boşluk karakteri girdiğimiz için, stringi boşluk karakterlerinden bölecek.

"a" harflerinden bölmesi için;

x = "Mustafa Serhat Dundar".split(/a/).inspect
puts x
> ["Must", "f", " Serh", "t Dund", "r"]

Peki hiç bir ifade kullanmasak?

x = "Mustafa Serhat Dundar".split(//).inspect
puts x
> ["M", "u", "s", "t", "a", "f", "a", " ", "S", "e", "r", "h", "a", "t", " ", "D", "u", "n", "d", "a", "r"]

Burada inspect kullanmasaydık, dizi elemanı olarak işlem görmez ve yalnızca string olarak işlem görürdü ifademiz.

x = "Mustafa_Serhat_Dundar".split(/_/).inspect
puts x
["Mustafa", "Serhat", "Dundar"]

Boşluk karakterini parametre olarak kullandığımız örneğin, düzenli ifadeler ile yazımı şu şekilde olacaktı;

x = "Mustafa Serhat Dundar".split(/\s+/).inspect
puts x

inspect metodu yerine, string ifademizi p karakteri ile çevreleyip aynı işlemi yaptırabiliriz. Tabi ki bu sadece irb'de hızlıca test işlemi gerçekleştirmek için kullanışlı bir yöntem, ciddi anlamda uygulama yazarken klasik metodlardan uzaklaşmayacağız.

Dizilerde iterasyon

Dizilerde iterasyon yapmak, stringlerde yaptığımız iterasyon ile oldukça benzer.

x = ["Mustafa", "Serhat", 21, 1989].each { |x| puts x.to_s + "ek"  }
> Mustafaek
> Serhatek
> 21ek
> 1989ek

Integer elemanlardan oluşan bir dizimiz var diyelim ki, dizinin her bir elemanını 3 ile çarpmak istiyoruz?

x = [1,2,3,4].collect { |x| x*2 }
puts x
> 2, 4, 6, 8

Ruby'de map metodu ile collect metodu aynı işi yapar.

x = [1,2,3,4].map { |x| x*2 }
puts x
> 2, 4, 6, 8

map ve collect kullandığımız her iki örnek birebir aynı sonucu verir.

Dizileri Birbirine Ekleme ve Bağlama

Dizileri aynı stringlerde olduğu gibi + metodu ile birbirine ekleyebiliriz.

x = [18,19,20]
y = ["Mustafa", "Serhat", "Dundar"]
z = x+y
p z

Burada p metodu ile puts z.inspect ifadesini kısaltmış olduk.

Dizilerde Çıkarma ve Fark

Tahmin edeceğiniz üzere - metodu bu işi yapar.

x = [22,23,24,25,26,27]
y = [22,23]
z = x-y
p z

Dizinin Boş Olup Olmadığının Kontrolü

empty? metodu ile dizinin boş olup olmadığını kontrol edebiliriz.

dizi = []
puts "Bu bos bir dizi" if dizi.empty?
> Bu bos bir dizi

Dizideki Bir Elemanın Varlığının Kontrolü

include? metodu bu işi yapmamızı sağlar.

dizi = ["Mustafa", "Serhat", "Dundar"]
puts "Bu eleman dizide var" if dizi.include?("Mustafa")
> Bu eleman dizide var

Stringlerde kullandığımız reverse metodunu diziler içinde kullanabiliriz. Örneğin dizi.reverse diziyi ters çevirecektir.

puts dizi.reverse.join("-")

Metodları birbirine ekleyerek kullanabildiğimizi de (method chaining) hatırlayalım:

puts dizi.reverse.reverse.join("-")

Görüşmek üzere. Başarılar.


Share this post!


Blog Comments powered by Disqus.