Ruby/Genel Bakış
Ruby is an nesne yönelimli betik dilidir. Ruby dili Yukihiro Matsumoto (Matz diye de bilinir) tarafından geliştirilmiştir. Ruby programlama dilinin ana web sitesi ruby-lang.org'dur. Geliştirilmeye Şubat 1993'te başlanmış ve ilk alfa versiyonu Aralık 1994'te yayınlanmıştır. Betik diller olan Perl ve Python gibi dillere alternatif olarak geliştirilmiştir. [1] Ruby ağırlıklı olarak Perl'den esinlenmiştir ve class kütüphaneleri Perl'ün işlevselliğinin nesne yönelimli bir uyarlamasıdır. Ruby ayrıca Lisp ve Smalltalk'tan da esinlenmiştir. Ruby birçok özelliğini Python'dan almamasına rağmen, Matz bu dili geliştirirken Python kod okumaları kendisine yardımcı olmuştur.[1]
MacOS sistemler Ruby kurulu olarak gelir. Birçok Linux dağıtımı ya Ruby kurulu olarak gelir ya da dağıtım'ın özgür yazılım depolarından kolayca kurulabilir. Teknik olarak daha yetenekli olanlar Ruby kaynak kodunu [2] indirip Unix, DOS, BeOS, OS/2, Windows, and Linux gibi birçok işletim sistemi için derleyebilir.[3]
Özellikleri
[düzenle]Ruby dili Perl, Smalltalk, Eiffel, Ada, Lisp, ve Python'dan özellikleri biraraya getirir.[3]
Nesne Yönelimli
[düzenle]Ruby tamamen nesne yönelimli bir dil olmak için büyük çaba harcar. Ruby'deki her değer bir nesnedir, hatta en temel veri tiplerindeki değerler , mesela: string'ler, sayılar hatta true ve false değerleri bile. Her nesne'nin bir sınıfı (class) vardır ve her sınıfın da bir üst sınıfı (superclass) vardır. Sınıf hiyerarşisi en tepesinde BasicObject sınıfı vardır, Object sınıfı dahil tüm sınıflar bundan türetilmiştir.
Her sınıfın bu sınıftan üretilen nesnelerde çağrılabilecek metodları olur. Metodlar sadece nesnelerde çağrılır - diğer dillerde olan "sınıf metodları" (class methods) Ruby dilinde yoktur.
Her nesnenin bir dizi oluşum değişkeni (instance variable) vardır, bunlar o nesnenin durumlarını saklar. Oluşum değişkenleri nesnede çağrılan metodlarla oluşturulur ve değerlerine erişilir. Oluşum değişkenleri tamamıyla o nesneye özeldir. Diğer nesneler onları göremez, aynı sınıftan üretilmiş nesneler olsalar bile. Ruby nesneleri arasında tüm iletişim metodlar üzerinden gerçekleşir.
Karışımlar (Mixins)
[düzenle]Class yapısı dışında Ruby modüllere de sahiptir (module). Bir modülün class gibi metodları olur ancak nesne oluşumları olmaz. Bunun yerine bir modül bir class içine dahil edilebilir (include) veya karıştırılabilir (mixin), böylece modülün metodları class'a eklenmiş olur. Bu biraz kalıtım yoluyla class elde etmeye benzer ancak bir class bir çok modül içerebileceği için çok daha esneklik getirir. Ayrı özellikleri ayrı modüllere yerleştirerek işlevsellik ayrıntılı şekillerde birleştirilebilir ve böylece kod kolayca yeniden kullanılabilir. Karışımlar Ruby'nin karmaşık ve kısıtlayıcı class hiyerarşilerinden uzak kalmasını sağlar.
Dinamik
[düzenle]Ruby çok dinamik bir programlama dilidir. Ruby programları C vaya Java programları gibi derlenmez. Program içindeki tüm sınıf, modül ve metod tanımları kod çalıştırılırken oluşturulur. Bir program çalışırken kendi tanımlamalarını da değiştirebilir. String ve Integer gibi en çok kullanılan verilerin class tanımları bile açılıp değiştirilebilir. Rubyistler buna monkey patching der ve bu diğer dillerin bir çoğunda yapamayacağınız bir şey.
Ruby'de değişken tipleri dinamik olarak verilir, bunun anlamı değişkenler her türlü nesne içerebilir. Bir nesnede bir metod çağırdığınızda Ruby metodu sadece adıyla arar - nesnenin tipiyle falan ilgilenmez. Buna duck typing denir ve bu sayede sadece aynı metodları uygulayarak diğerine benzer davranışta bulunan sınıflar oluşturabilirsiniz.
Singleton Class
[düzenle]Her Ruby nesnesi bir sınıfa sahiptir sözü tam doğru değil. Doğrusu her nesne iki sınıfa sahip: Bir normal class ve bir de singleton class. Bir nesnenin singleton class'ı tek oluşumunu o nesne olan isimsiz bir sınıftır. Her nesnenin kendi singleton class'ı kendisi ile birlikte nesne üretilirken üretilir. Singleton class'lar ait oldukları nesnenin sınıfından kalıtım yoluyla üretilir ve başlangıçta boştur, fakat onları açıp içine metodlar ekleyebilirsiniz, böylece sadece bağlı oldukları nesnede çağrılan metodlar oluşur. Bu Ruby'nin "class metodlarından" kaçınarak basitliği ve zarifliğini korumasının sırrıdır.
Metaprogramlama
[düzenle]Ruby o kadar nesne yönelimli ki class , module ve method'lar bile nesnelerdir. Her class aslında Class sınıfının bir oluşumudur ve her module aslında Module sınıfının bir oluşumudur. Programınız çalışırken metodlarını çağırabilir hatta değiştirebilirsiniz. Bunun anlamı, Ruby kodunu sınıflar ve modüller üretmek için kullanabilirsiniz, bu teknik metaprogramlama diye bilinir. Akıllıca kullanımı kodunuzda son derece soyut tasarım paternleri yakalamanıza ve bir metod çağırır gibi kolaylıkla kullanmanıza olanak tanır.
Esneklik
[düzenle]Ruby'de herşey şekillendirilebilir. Mevcut sınıflara yeni metodlar subclassing kullanmadan eklenebilir, operatörlerin yaptıkları overloading ile değiştirilebilir ve standart bir kütüphanenin bile davranışı kod çalışırken değiştirilebilir.
Değişkenler ve kapsam
[düzenle]Ruby'de değişkenleri veya değişkenlerin kapsamını belirtmenize gerek yoktur. Değişken adı otomatik olarak kapsamını belirler.
- x yerel bir değişkendir (veya değişkenden başka bir şey).
- $x global bir değişkendir.
- @x bir oluşum değişkenidir.
- @@x bir class değişkenidir.
Bloklar
[düzenle]Bloklar , Ruby'nin en sevilen biricik özellikleridir. Bir blok, bir metoda yapılan çağrıdan sonra görülebilen bir kod parçasıdır, şöyle ki:
laundry_list.sort do |a,b|
a.color <=> b.color
end
Blok is do ve end arasında kalan her şeydir. Blok içindeki kod yazıldığı yerde hemen çalışmaz, örneği düşünürsek kod bir nesne içine paketlenir ve sort metodu olarak tanımlanır. Bu nesne daha sonra aynı bir metod gibi çağrılabilir. sort metodu listedeki iki değeri karşılaştırmak istediğinde bloğu işletir. Bir blok nesnesi, diğer nesneler gibi, bir değişkende saklanabilir, diğer metodlara aktarılabilir vaya kopyalanabilir de.
Birçok programlama dili böyle kod nesnelerini destekler. Onlara closure denir ve herhangi bir dil için çok kuvvetli bir özelliktir, ancak bunlar genellikle yeterince kullanılmaz çünkü bunları oluşturmak için kullanılan kodlar çirkin ve doğal olmayan bir görünüme sahiptir. Bir Ruby bloğu bir closure oluşturup onu bir metoda geçirmek için özel ve temiz kodlu bir sadeliktedir. Bu basitlik sayesinde Rubyistler closure yapıları her çeşit yenilikçi üretimlerinde kapsamlı olarak kullanırlar.
Gelişmiş özellikler
[düzenle]Ruby birçok gelişmiş özellik içerir.
- Hataları değerlendirmek için Hata işleme.
- Reference counting yerine bir işaretle-ve-süpür atık toplayıcı .
- İşletim sisteminden bağımsız threading, sayesinde DOS gibi işletim sistemlerinde dahi çoklu işlem parçları yazabilirsiniz. (bu özellik native threads kullanan 1.9 sürümü sonrası kalkacaktır)
Ayrıca Ruby'ye C kullanarak eklentiler de yazabilirisiniz ya da Ruby'yi diğer yazılımların içine katabilirsiniz.
Referanslar
[düzenle]- ↑ 1,0 1,1 Bruce Stewart (November 29, 2001). "An Interview with the Creator of Ruby". O'Reilly. Erişim tarihi: 2006-09-11.
- ↑ "Download Ruby". Erişim tarihi: 2006-09-11.
- ↑ 3,0 3,1 "About Ruby". Erişim tarihi: 2006-09-11.