1 Ruby Nedir? 1.1 Amaçlar Bu kitabın asıl amacı, Ruby on Rails Web Framework u ile web programcılığı yapacaklara gerekli olan Ruby bilgilerini vermektir. Bunu yaparken, kitap okura şu becerileri de kazandıracaktır: Ruby Dili ni kullanabilme, Ruby de Sayısal Veri Tipleri ni bilme ve Ruby yi Hesap Makinası gibi kullanabilme, Ruby de string işlemleri ni yapabilme, Ruby nin temel veri tiplerini bilme ve onlarla işlem yapabilme. Ruby de veri yapıları oluşturabilme ve onlar üzerinde işlem yapabilme, Ruby de veri yapıları arasında dönüşümler yapabilme, Ruby nin Gömülü metotları nı öğrenme ve kullanabilme Ruby kütüphanesini ni bilme ve kullanabilme, 1.2 Ruby nin Yapısal Sıradüzeni Ruby nin Yapısal Sıradüzeni nin en tepesinde Basic Object vardır. Her şey ondan üretilir. Onun altında Object nesnesi vardır. Bütün nesneler,
2 BÖLÜM 1. RUBY NEDIR? Şekil 1.1: Ruby Sınıflarının Sıradüzeni sınıflar ve modüller ona bağlıdır. Her şey ondan üretilmiştir. Module doğrudan Object nesnesine bağlıdır. Class sınıfı Module den üremiştir. Ruby nin temel yapısal tipleri diye bilinen Array, Numeric, Hash, Regex, String, IO sınıfları doğrudan Object ten üremiştir. Numeric sınıfının Integer, Bignum, Float adlı üç alt sınıfı vardır. Bunlar sayılarla ilgili bütün işleri yaparlar. Dosya işlemlerini yapan File sınıfı, IO sınıfının bir altsınıfıdır. Ruby nin Yapısal Sıradüzeni ni gösteren iyi bir çizenek kendi sitesinde yoktur. Belki sürekli gelişen bir dil için, yapısal durumunu gösteren bir çizenek çizmek uygun değildir. Belki de yapısal sıradüzen (hierarchy) o kadar karmaşıktır ki onu bir tek çizenek ile ifade etmeye kalkmak yanıltıcı olabilir. İnternette şu anda var olan en yalın çizenek Şekil 1.1 ile verilendir. Bu çizenek çok yalınlaştırılmıştır. 1.3 Ruby Nedir? Ruby kendisini şöye tanıtıyor: Pragmatik programcılar olarak, bir çok dili inceledik, isteklerimizi iyi ve kolay yaparak hayatımızı kolaylaştıracak araçlar aradık. Ruby yi yaratana kadar, incelediğimiz her dilden ürküntüyle ayrıldık. Bizim işimiz problemleri çözmektir; bir kaşığa sığan derleyici yazmak değil. Katı kuralları olmayan dinamik bir dil istedik. Kodlarımızla iletişim
1.4. RUBY NIN NITELIKLERI? 3 içinde olmak için açıklık istiyoruz. Kodların yalın, duyarlı ve etkili olmasının gerektiğini biliyoruz. Ne kadar az yazarsak o kadar az hata yapacağımızı biliriz. Elbette mümkün olduğunca üretken olmak istiyoruz. Kodlarımız ilk seferinde doğru çalışsın istiyoruz. Kod düzeltmek (debug) için harcanan zamanın üretim zamanından çalınan zaman olduğunun farkındayız. Kodları yazarken denemenin, düzeltme için harcanacak zamanı kısaltcağının farkındayız. Ruby nin en üst düzeyde soyutlama yapabilen bir dil olmasını amaçladık. Bir dil ne kadar üst düzeyli ise, isteklerimizi kodlama o kadar kolaylaşacak, iş için daha az zaman harcanacaktır. Ruby yi yaratınca, amaçlarımızın gerçekleştiğini gördük. Onu yaratmak için, başka dillere harcanan zamandan fazlasını harcadık. Ruby yolunuzun üstündeki engel değildir. Bir problemi çözerken kullandığınız dilin derleyicisiyle ve o dilin kurallarıyla uğraşmak yerine, doğrudan problemin çözümüne odaklanabilirsiniz. Ruby size daha iyi programcı olmanın anahtarını veriyor. Zamanınızı derleyiciye değil, problemi çözmeye ayırınız. 1.4 Ruby nin Nitelikleri? Ruby, 1993 yılında Yukihiro Matsumoto tarafından Japonya da yaratılan tamamen nesne tabanlı bir dildir. Matsumoto, Ruby kullanıcıları arasında Matz diye anılır. Matz ile ilgili bilgilere bir çok web sitesinden erişilebilir. Örneğin, www.ruby-lang.org sitesi denenebilir. Ruby Smalltalk, Perl ve Python dillerinin özeliklerine sahiptir. Bu diller scripting language grubundadırlar. Smalltalk gerçek nesne yönelimli programlama dilidir. Ruby de onun gibi gerçek nesne yönelimli bir dildir. Ruby nin sözdizimi Smalltalk un sözdiziminden daha kolaydır. Ruby genel amaçlı, nesne tabanlı yorumlayıcı bir dildir. Ruby Python ve Perl gibi sunucu tarafında çalışır. Kullanıcıları, Ruby nin programcıların en iyi dostu olduğunu savunurlar. Ruby açık kaynak kodludur. Web den ücretsiz indirilebilir, ama lisansa tabidir.
4 BÖLÜM 1. RUBY NEDIR? Ruby ile Common Gate Interface (CGI) scriptleri yazılabilir. Ruby kodları, Hypertext Markup Language (HTML) diline gömülebilir. Ruby nin yalın ve kolay sözdizimi çabuk öğrenilir. Ruby nin sözdizimi C++ ve Perl gibi bir çok dilin sözdizimine benzer. Ruby kolay ölçeklenebiir; dolayısyla Ruby ile büyük programlar yazmak ve bakımını yapmak kolaydır. Ruby ile internet ve intranet programları yazılabilir. Ruby Windows yanında POSIX nitelikli işletim sistemlerine yüklenebilir. Ruby Tcl/Tk, GTK, ve OpenGL gibi GUI araçlarını destekler. Ruby DB2, MySQL, Oracle, ve Sybase gibi veri tabanlarına bağlanavilir. Büyük bir standart kütüphaneye sahiptir; bu kütüphanede bilgisayar ile yapılan hemen her iş ile ilgili bir sınıf module ya da metot vardır. Kaynak programı yazmak, okumak ve algılamak için harika bir sözdizimi vardır. Kolay öğrenilir ve kolay kullanılır. Etkileşimli kipi (mode), küçük programların ve betiklerin kolayca hemen denenmesini sağlar. Kendi içinde irb adlı bir etkileşimli kabuğu vardır. Bir uygulama için görsel arayüz hazırlamaya elverişlidir. Kaynak programın yazılması ve okunması çok kolaydır. Kaynak programın yapısı için birden çok yöntem vardır. Programcı kendisine en uygun olanı seçebilir. Ruby belleği kendiliğinden düzenler.
1.5. RUBY GERÇEK NESNE TABANLI DILDIR 5 1.5 Ruby Gerçek Nesne Tabanlı Dildir Ruby on Rails adlı popüler web geliştirme aracının dayalı olduğu Ruby dili nesne tabanlı, modüler, etkileşimli ve yorumlayıcı bir programlama dilidir. Kolay öğrenilir. Öteki dillerde blok oluşturmaya yarayan parantezlere ve noktalama simgelerine, Ruby genellikle, gerek duymaz. Ama onları kullanmaya alışkın olanların kullanmasına izin verir. Ruby nin kararlı sürümü 1.8 olarak kabul edilir. Bu kitap 2.0.0 sürümüne göre yazıldı. Ruby sürekli geliştirilen bir dil olduğu için, ilerideki zamanlarda yeni sürümleri ortaya çıkacaktır. Ruby yi öğrenmek isteyenlerin ve Ruby ile uygulama yazmak isteyenlerin son sürümü kullanmaları önerilir. Yalın ve kendine özgü bir sözdizimi (syntax) vardır. Unix, Linux, Mac, Windows, Amiga, Symbian vb her işletim sistemi üzerinde çalışabilir. Bazı Unix, Linux ve Mac sürümleriyle birlikte gelir. Ruby derleyicisi, Ruby web sitesinden ücretsiz indirilebilir. Şu anda oldukça geniş bir kütüphaneye sahip olmuştur. Kütüphanede module adını alan birimler, hemen her programcının gerekseme duyacağı metotları içerir. Ruby, her sınıf içinde metot tanımlamak yerine, her sınıfa uygulanabilen metotları module ler içinde toplamıştır. Böyle oluşu, dili daha küçük ama daha etkin kılmıştır. Ruby, gelişmiş kütüphanesi ve kolay sözdizimi nedeniyle, büyük programlarda C++, Java gibi dillere tercih edilen bir dil olmuştur. Java nın ağır sözdizimini yalın duruma getirdiği için, Java programcılarının dikkatini çekmektedir. 1.6 Ruby un Uygulama Alanları Web tabanlı uygulamalar (Ruby on Rails) Ağ GUI (Görsel arayüzler) İşletim sistemi ile ilgili uygulamalar Oyunlar Veri İşleme (veritabanı uygulamaları) İş hayatı için uygulamalar
6 BÖLÜM 1. RUBY NEDIR? 1.7 irb irb ye Etkileşimli Ruby kabuğu (Interactive Ruby, Ruby Shell) deniyor. Hemen her işletim sistemi için var olan kabuktur (komut istemi penceresi) gibidir. irb kabuğu, kullandığınız işletim sisteminin komut istemi penceresinde (kabuk) açılır. Ruby yorumlanabilen bir dil olduğu için, irb de yazacağınız her Ruby komutuna anında karşılık alırsınız. Ruby kabuğu, ondan beklenen her şeyi verir. Komutları akılda tutar (command-line history). Önceden verdiğiniz komutları yukarı aşağı tuşlarına basarak, görüntüye getirebilir, Onları yeniden yazmaya gerek kalmadan, Enter tuşuna basarak çalıştırabilirsiniz. Görüntüye gelen komut üzerinde sol-sağ tularıyla geri-ileri giderek, komutta değişiklik yapabilirsiniz. İş denetimi yapabilirsiniz. Ayrıntılar için Ruby dökümanlarına bakabilirsiniz. 1.8 Ruby Programları Ruby de birden çok satır gerektiren script ya da programları bir editörle yazıp.rb uzantısıyla kaydedebilirsiniz. Ruby programlarını çalıştırmak için, ruby program_adı.rb yazmak yetecektir. Tabii, sisteme ruby nin yerini tanıtmadıysanız, ruby nin ve programın bulunduğu adresleri (path) yazmanız gerekecektir. Unix türevlerinde programın ilk satırı olarak, ruby nin adresini #! /usr/bin/ruby -w biçiminde yazmak, sizi ruby nin bulunduğu adresi yazmak zahmetinden kurtaracaktır. Buna Unix te "shebang" deniyor. Daha iyisi çevre değişkenlerini (environment variables) ayarlamaktır. Bu işin nasıl yapıldığı, işletim sistemine bağlıdır. Ruby web sayfasında her işletim sistemi için çevre değişkenlerinin nasıl ayarlanacağını anlatan ayrıntılı açıklamalar vardır. Burada onları tekrarlamanın gereği yoktur. Unix sistemlerde, kullanıcının, programı çalıştırma yetkisine sahip olması gerekir. Bunun için, mod değiştirme yetkisine sahip olanın, kullanıcıya yetki vermesi gerekir. Bu yetkiyi chmod +x proram_adı.rb komutu ile verebilir (bkz. [14], [16], [11]).