Ruby'de Array kullanimi bazi kucuk nuanslari anladiktan sonra daha kolay ve kullanisli.
Oldukca geniz bir yelpazedeki array fonksiyonlari sayesinde mantigini anlayinca elinizde ne denli guclu bir yapi oldugunu kavrayabiliyorsunuz.
x=[]
bu kadar
daha sonra icine istediginiz bilgileri farkli sekillerde koyabiliyorsunuz. Mesela kurek (shovel) operatoru yani (<<) kullanarak
x << "word"
veya
x.push("word")
veya
x.unshift("word") ile
Simdi sadece ornekler verip aciklamayi uzun uzun yapana kadar ne yaptiklarini karsilarina yazarak kisace anlatmaya calisayim.
x=["a1", "a2", "a3"]
puts x.join(',')
-----------------------------------> a1, a2, a3
"this is a test".scan(/\w/).join('.)
----------------------------------> t,h,i,s,i,s,a,t,e,s,t
peki bu satir icin biraz konusalim. bunu benim de anlamam zor oldu. cunku komutlari ard arda baglayarak calistirdik.
parcalarsak belki biraz anlasilir. ama (/\w/) konusuna takiliyorsaniz bunun sadece bir regular expression oldugunu soyleyebilirim
puts "kisa metin. baska metin. son metin.".split(/\./).inspect
-------------> ["kisa metin","baska metin","son metin"]
Yine ard arda baglanmis komutlar ve kod blogundan gecse de onemli kismi array'i each ile madde madde taramak.
Tarama esnasinda rastlanan madde element degiskenine gonderiliyor. pipe dan sonraki bolumde ise bu degisken string'e cevrilip sonuna x yazilarak ekrana yazdiriliyor.
bu bloklu yazma modu basta biraz ter geliyor ama zamanla insanin gozu de mantigi da alisiyor.
mesela [1,2,3,4,5] gibi bir array 5 maddeden olusuyor degil mi ?
[1,2,3,4,5].size dersek de 5 goruyoruz
simdi su referanslari bir inceleyelim
-1 referansinin array'in sonuna gittigini
-2 ile sondan bir oncekine ulastigimizi farketmissinizdir. sondan basa dogru sanki uc uca eklenmis gibi degil mi
ama referansini 5 veya 6 verdiginizde hata vermeyip nil ile donmesi de goze carpmasi gereken baska bir konu.
sondaki bir maddenin yeni giris icin bos tutulan yer oldugunu dusunmekte fayda oldugu yonunde duyumlar aldim. Benden soylemesi
Dictionary objelerinden olusan bir array diye kisaca ozetleyebiliriz. yani ismi olan ve degeri olan ikililerin olusturdugu arrayler.
dict = {'cat'=>'feline animal', 'dog'=>'canine animal'}
bu tanimda iki tane madde oldugunu unutmayalim. yani dict.size = 2
dict['cat'] ----> feline animal
dict['cat'] = "fluffy animal"
puts dict['cat'] ---------> "fluffy animal"
yani icerigi bu sekilde degisebiliyor
dict.keys
dict.values
gibi
dict.delete("cat")
dict.delete_if{|key,value|, value<25}
Oldukca geniz bir yelpazedeki array fonksiyonlari sayesinde mantigini anlayinca elinizde ne denli guclu bir yapi oldugunu kavrayabiliyorsunuz.
Array (Dizi)
Ruby'de degiskenleri .NET de oldugu gibi onceden tanimlamak gerekmiyor. ilk aldiklari degere gore otomatik olarak tip atamasi yapiliyor. Dolayisiyla Array icin de onden bir tanimlama yapmak gerekmiyor.x=[]
bu kadar
daha sonra icine istediginiz bilgileri farkli sekillerde koyabiliyorsunuz. Mesela kurek (shovel) operatoru yani (<<) kullanarak
x << "word"
veya
x.push("word")
veya
x.unshift("word") ile
Simdi sadece ornekler verip aciklamayi uzun uzun yapana kadar ne yaptiklarini karsilarina yazarak kisace anlatmaya calisayim.
x=["a1", "a2", "a3"]
puts x.join(',')
-----------------------------------> a1, a2, a3
"this is a test".scan(/\w/).join('.)
----------------------------------> t,h,i,s,i,s,a,t,e,s,t
peki bu satir icin biraz konusalim. bunu benim de anlamam zor oldu. cunku komutlari ard arda baglayarak calistirdik.
parcalarsak belki biraz anlasilir. ama (/\w/) konusuna takiliyorsaniz bunun sadece bir regular expression oldugunu soyleyebilirim
puts "kisa metin. baska metin. son metin.".split(/\./).inspect
-------------> ["kisa metin","baska metin","son metin"]
Array Iteration
Hizli bir baslangica ne dersiniz ?each
Yine ard arda baglanmis komutlar ve kod blogundan gecse de onemli kismi array'i each ile madde madde taramak.
Tarama esnasinda rastlanan madde element degiskenine gonderiliyor. pipe dan sonraki bolumde ise bu degisken string'e cevrilip sonuna x yazilarak ekrana yazdiriliyor.
bu bloklu yazma modu basta biraz ter geliyor ama zamanla insanin gozu de mantigi da alisiyor.
collect / map
Aciklama
internette bir kaynaga gore fark buymus.
yani collect blokta istenenlere gore yeni bir array olarak donuyor
oysa each blokta istenilenleri array'deki maddelere uyarliyor.
internette bir kaynaga gore fark buymus.
Array#collect
(and Array#map
) return a new array based on the code passed in the block. Array#each
performs an operation (defined by the block) on each element of the array.yani collect blokta istenenlere gore yeni bir array olarak donuyor
oysa each blokta istenilenleri array'deki maddelere uyarliyor.
first, last, -1, -2
Array icindeki maddeler arasinda dolasirken isminden de anlasilacagi uzere ilk ve son maddelere girmek icin x.first veya x.last kullanmak mumkun. Ancak tam burada Ruby'deki array yapisini algilamak icin bize bir firsat doguyor.mesela [1,2,3,4,5] gibi bir array 5 maddeden olusuyor degil mi ?
[1,2,3,4,5].size dersek de 5 goruyoruz
simdi su referanslari bir inceleyelim
-1 referansinin array'in sonuna gittigini
-2 ile sondan bir oncekine ulastigimizi farketmissinizdir. sondan basa dogru sanki uc uca eklenmis gibi degil mi
ama referansini 5 veya 6 verdiginizde hata vermeyip nil ile donmesi de goze carpmasi gereken baska bir konu.
sondaki bir maddenin yeni giris icin bos tutulan yer oldugunu dusunmekte fayda oldugu yonunde duyumlar aldim. Benden soylemesi
Hash
Benim icin yeni olan bu kavram aslinda array kavrami ile oldukca yakin. Bugune kadar nedense hash denince hash koddan baska birsey dusunmedigim icin ilk karsilastigimda ne oldugunu idrak etmem biraz zaman aldi.Dictionary objelerinden olusan bir array diye kisaca ozetleyebiliriz. yani ismi olan ve degeri olan ikililerin olusturdugu arrayler.
dict = {'cat'=>'feline animal', 'dog'=>'canine animal'}
bu tanimda iki tane madde oldugunu unutmayalim. yani dict.size = 2
dict['cat'] ----> feline animal
dict['cat'] = "fluffy animal"
puts dict['cat'] ---------> "fluffy animal"
yani icerigi bu sekilde degisebiliyor
each
Arraydeki gibi tek tek maddelerin ustunden gecmek icin kullaniyoruz ama bu sefer ikili olarak geliyorlar.keys, values
hash icindeki tum key'ler ve tum value'lari alab'lmek icin kullanilir.dict.keys
dict.values
gibi
delete, delete_if, delete_at
hash ustunden madde silmek icin kullanilir.dict.delete("cat")
dict.delete_if{|key,value|, value<25}