Ruby: Yazılım dünyasının perde arkasındaki “Yakut”u

Yakut

Ruby, Yukihiro Matsumoto tarafından 1993 yılında geliştirilmeye başlanmış, bileşenlerinin tamamı nesnelerden oluşan bir programlama dilidir. İlk sürümü de 1995 yılında ortaya çıkmıştır. Yapı olarak Ada, Perl, SmallTalk, Eiffel, Lisp gibi dillerden etkilenmiştir. Son zamanlarındaki popülerliğinde ise Ruby ile yazılmış bir web framework’ü olan Ruby On Rails (RoR)’in etkisi büyüktür.

Ruby gem denilen kod kütüphaneleri ile dünyaya açılmıştır ve herhangi bir yazılımcı kendine ait kod kütüphanesini belirli yönergelere bağlı kalmak koşulu ile bir gem paketi haline getirip Ruby camiası ile paylaşabilir. Bugün itibari ile yazılmış 88,254 gem’e, rubygems.org sitesi aracılığı ile ulaşabilirsiniz.

Ruby çok geniş bir geliştirici topluluğuna sahiptir ve programlama dillerinin popülaritesini araştıran TIOBE’ye (www.tiobe.com/index.php/content/paperinfo/tpci/index.html) göre, Ruby dünyada en çok kullanılan 13. dil konumundadır. Bunda, esnek kod yapısının ve geliştiricinin bu dili kullanırken eğlenmesinin payı büyüktür. Ayrıca Ruby uygulama geliştirme sürecinizi önemli ölçüde kısaltacaktır.

Peki Ruby öğrenmeye karar verdiniz. Ne yapmalısınız?

Ruby’i öğrenebilmeniz ve canlı olarak test edebilmeniz için internet üzerinde birçok kaynak bulmanız mümkün. Bunlardan bazılarını şöyle sıralayabiliriz;

https://rubymonk.com

https://tutorialspoint.com/ruby/

https://tryruby.org

https://ruby.learncodethehardway.org/book/

https://www.bloc.io/ruby-warrior/ (benim favorim)

 

Öğrenme sürecinde size çok garip gelebilecek bir nesne yönelim yapısı ve sözdizimi ile karşılaşacaksınız. Başta size Yukihiro bunu sarhoşken miyazmış acaba dedirten bu yapı ilerleyen zamanlarda taşların yerine oturmasıyla hayranlığınızı kazanacak. Kendisinin de dediği gibi: “Ben Ruby’i kolay bir dil olsun diye yapmadım. Doğal bir dil olsun diye yaptım. Ruby tıpkı insan vücudu gibi, görünüşte basit, ama içinde çok kompleks bir yapıya sahiptir”. Bu Ruby’nin kendine has dinamikleri ve özgün olma çabasıyla ilgili. Bu yüzden onu kendinize uydurmaya çalışmak yerine onun diline uyum sağlamanız ileride DRY (don’t repeat yourself) prensibi ile kod yazmanızı sağlayacak ve görüş açınızı birkaç seviye yukarıya taşıyacaktır. Ayrıca Ruby’nin sizi yönlendirdiği yolu takip ettiğinizde daha performanslı uygulamalar yazmaya başladığınızı fark edeceksiniz.

 

Üzerinden geçtiğim onca dilden sonra, kendisine tam anlamıyla hayranlık beslediğim tek dil diyebilirim Ruby için. Kusursuz değil belki ama kusursuza yakın. Böyle düşünmeme sebep olan özelliklerinden bazılarını paylaşayım.

 

Dynamic Typing

En basit anlamıyla değişken tiplerinin çalışma zamanında (runtime) atanmasıdır. Yani;

foo = ‘merhaba dünya’

foo = 123

şeklinde alt alta iki satır hata vermeden çalışacaktır. Çünkü foo değişkeninin tipini ilk verilen değerin tipine sabitleyen bir mekanizma yoktur. Bununla beraber Ruby ‘Strong Typing’ diller ailesine mensuptur. Yani;

foo = ‘5’ + 3 gibi bir tanımlama Ruby’de hata verir. Bu kod içerisinde ayıklaması çok zor olan mantık hatalarını önemli ölçüde engeller. Dolayısıyla typing açısından hem esnek hem de hata yapmanızı önleyen bir mekanizma arkada sizin için çalışıyor olacak.

Duck Typing

Class tipleri vardır ama class’lar değişkenlere atıldığında aynı özelliklere sahip başka bir class gibi davranabilirler.

 

class Ordek

def vakla

puts “Vaaaaaaaak!”

end

end

 

class Kisi

def vakla

puts “Kişi vak sesini taklit eder”

end

end

 

def ormanda(ordek)

ordek.vakla

end

 

donald = Ordek.new

osman = Kisi.new

ormanda donald

ormanda osman

 

Modüller

Ruby ‘multiple inheritance’ destekler ve güçlü modül yapısıyla, lego parçalarını birleştirir gibi program yazabilirsiniz.

 

Metaprogramlama

Ruby’de dilin kendi sınıfları içine bile müdahale edip override edebilirsiniz. Bunun yanında meta programlama sağlayan sayısız metod barındırır. Ruby’i kafanıza göre değiştirmekten çekinmeyin, özgürlüğü hissedin.

 

Bloklar

Bir kod bloğunu değişkenle bir fonksiyon içine gönderebilirsiniz. Bu sayede kendi özelleştirilmiş döngülerinizi yazabildiğiniz gibi metaprogramlama açısından da yeni bir vizyon kazanırsınız.

 

class Array

def ikiyle_carp(&block)

each do |i|

yield i*2

end

end

end

[1,2,3,4].ikiyle_carp{|i| print i}

Çıktısı: 2468

Yazının sonuna gelmişken unutmadan. Ruby’nin resmi sitesi;

https://www.ruby-lang.org/tr/

 

Eğer Windows’a kurulum yapacaksanız;

https://rubyinstaller.org/

sitesini kullanabilirsiniz

 

Onur Eren Elibol Yazar Hakkında