Diziler (Uzmanlar için)

Merhabalar,

Uzun süredir herhangi bir yazı yazmıyordum, arkadaşlar arasında konuşurken “neden yazmıyorsun” gibi sorulara maruz kaldım, “eee dedim yazacak pek bir şey kalmadıki, ben ruby veya yazılım ile ilgili konularda yazıyorum” dedim. “eğer herhangi bir konuda istek gelir ise o konuda yazarım ama, şimdilik bÖyle bir konu yok” dedim. Dedim de hemen cevabı yapıştırdılar suratımın orta yerine.. “Ruby dizileri gerçekten basit tutmuş, herhalde hız için.. Lisp veya fonksiyonel programlama dileri kadar esnek değil” dediler.. “Eneee” dedim :) bana yazı yazacak konu çıktı.

Şimdi Öncelikle biraz konu ile ilgili kendimizi motive edelim; Neden dizi işlemleri bu kadar Önemli ? Ya da diğer işlerden farkı ne olabilir ki ?

Öncelikle bir konuya açıklık getirmek gerekir, günümüzde yazılan programlar içerisinde pek çok durumda dinamik veya durağan veri kümeleri ile işlemler yapılıyor. Bu işlemler, yazdığımız programlar içerisinde performansı etkileyen en Önemli etken olarak karşımıza çıkıyor. Ve günümüzdeki daha fazla veri üzerinden daha doğru bilgi edinme anlayışı nedeni ile dizilerin boyutları gün geçtikce artıyor ve üzerlerinde yapılan işlemler gün geçtik fazlalaşıyor, bu performans etkeni daha da Önemli hale geliyor. Yanlış anlaşılma olmasın, burada bahsettiğim performans Şişirme Veri Girişi adlı yazıda bahsettiğim veri yoğunluğunun artması ile beraber ortaya çıkan performans kÖtüleşmesi.

Diziler üzerinde yapılacak işlemlerde Öncelikle iki ana başlıkta değerlendirilmelidir;
1- Kolay kullanım,
2- En iyi algoritmanın kullanılması.

İkinci maddenin neden gerekli olduğu konusunda fazla sÖze gerek yok ama, birinci maddenin neden gerekli olduğu konusunda aklınızda sorular olabilir, bu soruları ortadan kaldırmak için şu şekilde bir açıklama yapabilirim. “Diziler üzerinde yaptığınız optimizasyonlar, algoritma seçimleri veya memory optimizasyonları” gerçekten zor ve uygulanması oldukça tartışmalı olabilir. Örneğin google’ın java dili için çıkardığı “Google Collections Library” buna Örnek olarak gÖsterilebilir. Kolay kullanım ve entegrasyon yazılımcılar tarafından her zaman tercih edilir.

Peki Ruby tüm bunların karşısında bize güzel silahlar veriyor. Aslında tüm Ruby işlemlerinde olduğu gibi performans basitliğin gerisinde kalmış, yüzlerce kez sÖylediğim gibi “yazılımın çalışma hızı sonsuza giderken, geliştirme süresi sıfıra gitmeli” felsefesine ters değil.

data = [1,2,4,8,12,5,7,3,0,13,10,11,3]

# For..In
data.each { |x| puts "x=#{x}" }

# data içerisindeki tüm elemanları tek tek verilen 
# blok içerisindeki işlemden geçirir ve sonuçlardan yeni bir dizi üretir.
puts data.collect { |x| x + x }

# For..In :) ile indexleri verir.. :) pek çok programlama dilinde 
# karşılığı bulunmaz.
data.each_with_index { |x, index| puts "#{index}. eleman = #{x}" }

# 5'den büyük ilk kayıdı bulur.
puts data.detect { |x| x > 5 }

# 5'den küçük olanları true_data değişkenine, 
# diğerlerini false_data değişkenine dizi olarak atar.
true_data, false_data = data.partition { |x| x < 5 }
puts true_data
puts false_data

# 5'den küçük olanları diziden çıkartır ve geri dÖner.
puts data.reject { |x| x < 5 }

# Varsayılan sıralama işlemi
puts data.sort

# Belirlenmiş kritere gÖre sıralama işlemi (string olarak sıralama)
puts data.sort_by { |x| x.to_s }
# veya
puts data.sort_by { |x| (x+5)/x }

Kolay gelsin.. :)

Diziler (Uzmanlar için)” üzerine 3 yorum

  1. Öncelikle yazı için teşekkürler. wxruby hakkında uzunn bir makale nasıl olurdu? :)
    kolay gelsin.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir