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 1.5 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 1.7 BÖLÜM 1. RUBY NEDIR? 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]).