Programming Ruby

The Pragmatic Programmer's Guide

Previous < Contents ^
Next >

Preface



Bu kitap Ruby programlama dili için bir kılavuz ve başvuru kitabıdır. Ruby kullanırsanız daha iyi kod yazacak, daha üretici olacak ve programlamadan daha çok eğleneceksiniz.

Bunlar cüretkar iddialar, ancak bu kitabı okuduktan sonra bizle aynı fikirde olacağınızı düşünüyoruz. Ve bu iddialarımızı destekleyecek deneyime sahibiz.

Pratik Programcılar olarak, hayatımızı kolaylaştıracak, işlerimizi daha iyi yapmamızı sağlayacak birçok, birçok programlama dili denedik. Şimdiye kadar, kullandımız diller tarafından her zaman hayal kırıklığına uğratıldık.

Bizim işimiz problemleri çözmek, derleyicileri şımartmak değil; bu yüzden gelişigüzel, sert kuralları olmayan, bize uyum sağlayan dinamik dillerden hoşlanıyoruz. Kodumuzu kullanarak iletişim kurabilmek için açıklığa ihtiyacımız var. Biz özlüğe ve kod içinde, ihtiyaçlarımızı tam ve verimli olarak açıklayabilme yeteneğine değer veririz. Daha az kod, daha az yanlış demektir. (Ve bileklerimiz ve parmaklarımız da minnetkar kalırlar.)

Olabildiğince verimli olmak istiyoruz, bu nedenle kodumuz ilk seferde çalışmalı; çünkü hata ayıklamanın geliştirme saatimizden çalınan zaman israfı olduğunu düşünüyoruz.

Biz bir dilin yüksek seviyeli bir soyutlama sunmasını istiyoruz. Bir dil ne kadar yüksek seviyeliyse, ihtiyaçlarımızı koda çevirmek için daha az vakit harcarız.

Ruby'yi keşfettiğimiz zaman, aradığımız şeyi bulduğumuzu anladık. Çalıştığımız diğer dillere göre, Ruby yolunuzun dışında kalır. Derleyici ya da dil konularıyla uğraşmaksızın, tamamen probleminize yoğunlaşabilirsiniz. Bu Ruby'nin nasıl daha iyi bir programcı olmanıza yardım ettiğine bir örnektir: vaktinizi derleyiciyle uğraşarak harcamak yerine kullanıcılarızın problemlerine ayırarak değerlendirebilirsiniz.

Ruby Sparkles

Smalltalk gibi, gerçek bir nesneye yönelik dili ele alalım. Alışılmadık sözdizimini atalım, yerine alışılageldik, dosya- tabanlı kaynak kodları koyalım. Şimdi, Python ve Perl dillerinin esneklik ve rahatlığını ekleyelim.

Kendinizi Ruby'de bulursunuz.

NY (nesneye yönelik) meraklıları Ruby'de hoşlanacak çok şey bulacaklar: saf nesneye yönelik yapı (herşey bir nesnedir), meta sınıflar, kapanmalar (closure), tekrarlayıcılar (iterator) ve her yerde bulunabilen aynı cins öbeklere sahiptir. Smalltalk kullanıcıları kendilerini evlerindeymiş gibi hissedeceklerdir (ve C++ ve Java kullanıcıları kıskançlık hissedeceklerdir).

Aynı zamanda, Perl ve Python sihirbazları sevdikleri bir çok gözde özelliği bulacaklardır: düzenli ifadelere tam destek, elverişli kısayollar, ve dinamik değerlendirme.

Ruby'y öğrenmek kolaydır. Günlük işleri kodlaması kolaydır ve bunu bi kere yaptığınız zaman korumak ve geliştirmek oldukça kolaydır. Bundan sonra zor görünen şeylerin o kadar da zor olmadığını göreceksiniz. Ruby, En az Sürpriz Prensibi'ni takip eder -- özel durumlar ya da istisnalar dışında işler umduğunuz gibi gider. Ve bu, programlama yaparken gerçekten bir fark yaratır.

Ruby'yi şeffaf bir dil olarak tanımlarız. Bununla, Ruby'nin birçok sözdiziminin ardında çözümü belirsizleştirmediğini ve basit şeyleri seri halde yapabilme ihtiyacını kastediyoruz. Ruby ile, probleme daha yakın programlar yazabilirsiniz. Düşüncelerinizi ve tasarımlarınızı bir çok programlama dilinde olduğu gibi durmadan haritalamak yerine, Ruby ile düşüncelerinizi nasıl doğrudan ve zarifçe ifade edebildiğinizi göreceksiniz. Bu da kodunuzun daha hızlı olması anlamına gelir. Aynı zamanda programlarınız okunabilir ve sürdürülebilir kalır.

Ruby kullanırken, tek bir oturuşta ilk seferde çalışan ne kadar çok kod yazabildiğimize şaşırmıştık. Çok az sözdizimi hatası, tip ihlali olmadan ve alışıla gelenden çok daha az hata vardı. Bu farklılık yaratır; sizi yanlışa sürükleyebilecek daha az şey vardır. Her satırın sonunda mekanik olarak noktalı virgül koymak gibi sıkıcı durumlar da yaşamazsınız. Tip tanımlamalarını eş tutmak için (özellikle ayrı dosyalarda) karmaşa da yaşamazsınız. Sadece derleyiciyi memnun etmek için gereksiz kelimelere de ihtiyaç yoktur. Hataya- duyarlı temel kod yoktur.

Peki niye Ruby öğrenmeli? Çünkü Ruby'nin, daha iyi programlama yapmanıza yardım ettiğini düşünüyoruz. Daha az oyalayıcı şeyle probleminize yoğunlaşmanızı sağlar. Ruby, hayatınızı kolaylaştırır.

Ruby ne Çeşit bir Dildir?

Eski günlerde, diller arasındaki fark basittir: ya C ya da Fortran gibi derlenmişlerdi, ya da BASIC gibi yorumlanmıştılar. Derlenmiş diller size hız ve düşük- seviyeli erişim sağlarken; yorumlanmış diller yüksek seviyeli ancak yavaştılar.

Zaman değişti ve artık herşey eskisi kadar basit değil. Bazı dil tasarımcıları yarattıkları dillere ``betik dilleri'' adını vermeye başladılar. Perl, TCL, ve Python dillerinin hepsi betil dilleri olarak adlandırılırlar.

Peki, gerçekten bir betik dili nedir? Samimiyetle bir fark yapmaya değer mi bilmiyoruz Ruby'de işletim sisteminin tüm belli başlı özelliklerine erişebilirsiniz. Perl'de ve Python'da yapabildiğiniz şeyleri Ruby ile daha temiz bir şekilde yapabilirsiniz. Ancak Ruby temelde farklıdır. Güçlü teorik kökleri ve zarif, hafif bir sözdizimi de olan gerçek bir programlama dilidir.

Ruby'yi betikleme işleri için kullanmış olsak da, çoğu zaman genel- amaçlı bir programlama dili olarak kullanılır. Ruby'yi GUI uygulamaları ve orta tabaka sunucu süreçleri yazmak için kullandık ve halen bu kitabın geniş kısımlarını biçimlendirmek için kullanıyoruz. Başkaları sunucu makinelerini ve veritabanlarını idare etmek için de kullandı. Ruby Web sayfalarını sunuyor, veritabanlarına arayüz sağlıyor ve dinamik içerik sunuyor. İnsanlar Ruby'de, yapay zeka ve makine öğrenme (machine learning) programları yazıyor ve en az bir kişi doğal evrimi araştırmak için kullanıyor. Ruby, araştırmaya yönelik matematik için harika bir araçtır. Ve dünyadaki birçok insan Ruby'yi değişik uygulamaları yapıştırmak için bir yol olarak kullanıyor. Ruby, geniş bir problem alanında çözüm sunmak için doğru dildir.

Ruby Benim İçin Mi?

Ruby, progamcıların problemleri için her derde deva, evrensel bir ilaç değildir. Başka bir dile ihtiyaç duyacağınız zamanlar her zaman olacaktır: çevre buna dikte edebilir, ihtiyacınız olan özel kütüphaneler olabilir, performans kaygısı, ya da basitçe eğitimle ilgili bir konu olabilir. Hala Java ve C++'a bütünüyle ara vermedik (bazı zamanlar bunu yapabilmeyi istememize rağmen).

Buna rağmen, Ruby muhtemelen tahmin edebileceğinizden daha geçerlidir. Hem dille hem de üçüncü parti kütüphanelerle genişletmesi oldukça kolaydır. Bir çok platforma taşınabilir bir dildir. Nispeten daha hafiftir ve sadece mütevazi sistem kaynağı tüketir. Ve öğrenmesi kolaydır; bu kitabın taslaklarına göz gezdirerek Ruby kodlarını bir günde üretim sistemlerine koyan insanlar tanıyoruz. Ruby'yi, C için ciddi şekilde kod yazmayı gerektiren, X11 pencere yöneticisini gerçekleştirmek için kullandık. Ruby, normalde günlerimizi alacak şeyleri saatler içinde yapmamıza yardım etmesiyle öne çıktı.

Ruby'le bir kere rahata erdiniz mi, bir daha dil seçimi konusunda düşünmeyeceğinizi biliyoruz.

Bu Kitabı Niçin Yazdık?

Pratik Programcı'yı (The Pragmatic Programmer) yazmayı yeni bitirmiş, ailelerimiz bizimle tekrar konuşmaya başlamışlardı ki, birden başka bir kitap daha yazmamız gerektiğini hissettik. Niçin? Bu bizim için bir çeşit çoskulu misyonerliğe dönüşmüştü.

Ruby, Yukihiro Matsumoto (Matz) tarafından Japonya'da yaratıldı. 1995'ten beri, Japonya'da popülaritesi hayret verici bir şekilde arttı ve Japonya'da Ruby'nin Pyhton'dan daha popüler olduğuna dair rivayetler var. Ama şu ana kadar, detaylanmış Ruby dökümanlarının çoğu Japonca'ydı. Muhtemelen pek rastlamayacağınız bir programlama dili.

Japonya dışındaki insanların da Ruby'yi kullanmaları ve yararlarından keyif almaları için, Ruby'yi İngilizce dökümante etmeye karar verdik. Ve küçük bir projenin nasıl büyüdüğünü sıralayalım....

Ruby Versiyonları

Bu kitap Ruby'nin Eylül 2000'de duyurulan 1.6 versiyonunu dökümante eder.

Ruby versiyon numaraları diğer açık kaynak projelerinin takip ettiği versiyon şemasını kullanır. Çift numaralı altsürüm numaraları (1.0, 1.2, 1.4 ve diğerleri) kararlı, açık sürümlerdir. Bu sürümler önpaketlemesi yapılan ve Ruby sitelerinde yayınlanan sürümlerdir.

Yazılımın geliştirme versiyonları 1.1 ve 1.3 gibi tek altversiyon numaralarına sahiptirler. Bunlar sayfa xxvii'deki kutuda açıklandığı gibi, kendinizin indirip kurmanızı gerektiren sürümlerdir.

Ruby'yi Kurmak

Ruby'yi ftp://ftp.netlab.co.jp/pub/lang/ruby adresinden ya da sayfa 526'daki Ek C'de listelenen yansı sitelerinden alabilirsiniz. Orada en son kararlı sürümü bulacağınız gibi, bir çok değişik geliştirme sürümüne de rastlayacaksınız.

Her zaman Ruby'nin kaynak kod sürümlerini bulabilirsiniz, ayrıca Windows ya da diğer işletim sistemleri için ikiliklerini (Ruby'nin http://www.pragmaticprogrammer.com/ruby/downloads/ruby-install.html'daki Windows için ikilik sürümü gibi) bulacaksınız.

Sidebar: The Very Latest Ruby

En yeni versiyonları, test edilmemiş kesilmiş taraflarını (bu kitabı yazarken olduğu gibi) kullanmak isteyenler geliştiricilerin çalışma depolarından gelişme versiyonlarını alabilirler.

Ruby geliştiricileri revizyon kontrol merkezi olarak CVS (Concurrent Version System, serbestçe http://www.cvshome.com adresinden ulaşabilirsiniz) kullanıyorlar. Aşağıdaki CVS komutlarını kullanarak anonim bir kullanıcı olarak arşivlerindeki dosyaları kontrol edebilirsiniz.

% cvs -d :pserver:anonymous@cvs.netlab.co.jp:/home/cvs
   login
(Logging in to anonymous@cvs.netlab.co.jp)
CVS password: guest
% cvs -d :pserver:anonymous@cvs.netlab.co.jp:/home/cvs
   checkout ruby

Geliştiricilerin en son bıraktığı haliyle, dünyanın öbür ucundaki bir depodan, yerel kaynak ağacınızı güncelleyerek tüm kaynak kodu ağacı makinenizde bir ``ruby'' altdizinine kopyalanacaktır. Hayatta olmak için ne güzel bir zaman, öyle değil mi?

Building Ruby

Ruby sürümünde README adında, Ruby'yi sisteminize nasıl yükleyeceğinizi detaylı olarak anlatan bir dosya bulacaksınız. Özetlemek gerekirse, herhangi bir POSIX- tabanlı sisteme, diğer açık kaynak uygulamalarında yaptığınız gibi aynı dört komutla kurabilirsiniz: ./configure, make, make test, and make install. Ruby'yi diğer ortamlar altında (Windows da dahil) cygwin gibi bir POSIX taklidi ortam kullanarak [Detaylar için http://sourceware.cygnus.com/cygwin adresine bakın.] ya da yerel derleyiciler kullanarak ---başlangıç için sürümün win32 altdizinindeki ``ntsetup.bat'''a bakın-- kurabilirsiniz.

Running Ruby

Artık Ruby yüklendi ve muhtemelen bazı programları çalıştırmak istiyorsunuz. Derlenmiş ortamlardan farklı olarak, Ruby'yi çalıştırmak için iki yol vardır---interaktif olarak ve bir program olarak.

İnteraktif Ruby

Ruby'yi interaktif olarak çalıştırmanın en basit yolu, kabuk istemcisine basitçe ``ruby'' yazmaktır.

% ruby
puts "Merhaba, dünya!"
^D
Merhaba, dünya!

Burada basit bir puts ifadesi ve bir dosya sonu karakteri (sisteminizdeki kontrol-D) koyduk. Bu işlem çalışır ancak eğer bir yazım hatası yaparsanız bu ızdırap gibi birşey olur ve kodlarken neler olup bittiğini göremezsiniz.

Ruby sürümünün sample dizininde ``eval.rb'' adında bir betik bulacaksınız. Bu girilen her ifadenin değerini gösterir:

% cd sample
% ruby eval.rb
ruby> a = "Merhaba, dünya!"
"Merhaba, dünya!"
ruby> puts a
Merhaba, dünya!
nil
ruby> ^D
%

Burada puts'un çıktısını ve geri dönüş değerini (nil) görüyoruz.

Çoklu satır ifadelerinin çalışmamasına, bulunduğunuz satırı düzenleyememenize ve geri dönüp önceki satırları kullanamamanıza rağmen herşey iyi ve güzel.

eval.rb'den bir adım ilerde, irb---Interactive Ruby'ye sahibiz. irb, komut-satırı geçmişi, satır düzenleme yeterliliği ve iş kontrolüyle bir Ruby kabuğudur. Sayfa 517'de göreceğiniz gibi bir çok seçeneği olan, ayarlanabilir bir kabuktur. Örneklerimizin bazılarını interaktif olarak deneyebilmeniz için irb ile aşina olmanızı tavsiye ediyoruz.

Ruby Programs

Son olarak, bir Ruby programını, diğer kabuk betikleri, perl programları ya da Python programları gibi, bir dosyadan çalıştırabilirsiniz. Betik ismini bir argüman olarak vererek Ruby'yi çalıştırabilirsiniz:

% ruby myprog.rb

Ya da program dosyasının ilk satırı olarak Unix ``shebang'' notasyonunu kullanabilirsiniz. [Eğer sisteminiz destekliyorsa, shebang satırında #!/usr/bin/env ruby yazarak sizin için Ruby'nin yolunu bulmasını sağlayabilir ve çalıştırabilirsiniz.]

#!/usr/local/bin/ruby -w

puts "Merhaba, dünya!"

Eğer bu kaynak dosyasını çalıştırılabilir yaparsanız (örneğin chmod +x myprog.rb kullanırsanız) Unix dosyayı bir program gibi kullanmanıza izin verir:

% ./myprog.rb
Merhaba, dünya!

Benzer birşeyi Microsoft Windows altında dosya birlikteliklerini kullanarak ad yapabilirsiniz.

Kaynaklar

Ruby Web sitelerini http://www.rubycentral.com ve http://www.ruby-lang.org ziyaret edin ve yenilikleri takip edin, ve diğer haber gruplarındaki ya da e- posta alistelerindeki diğer Ruby kullanıcıları ile sohbet edin (Ek C'ye bakın).

Ve emin olun; yorumlar, öneriler, metinlerdeki hatalar, örneklerle ilgili problemler hakkında düşüncelerinizi duymak hoşumuza gidecektir. Bize aşağıdaki adreslerden e- posta atabilirsiniz:

mailto:rubybook@pragmaticprogrammer.com

Eğer kitaptaki hataları belirtirseniz, onları ???errata??? listesine ekleyeceğiz:

http://www.pragmaticprogrammer.com/ruby/errata/errata.html

Son olarak http://www.pragmaticprogrammer.com/ruby adresinde kitapta bulunan neredeyse tüm örneklere ulaşabilirsiniz.

Acknowledgments

Bu kitap, eski ya da yeni, tüm arkadaşlarımızın yardımı olmadan asla tamamlayamayacağımız muhteşem bir girişimdi. Addison-Wesley takımındaki eski arkadaşlarımızı gururla symak istiyoruz: Mike Hendrickson, John Fuller, yardımsever Julie Steele, ve muhteşem Julie DiNicola. Hepinize teşekkürler.

Eleştirmenlerimiz de fantastiktiler. Teknik detaylarla dolu bir kitabı eleştirmek o kadar da kolay değil; bu yüzden özellikle aşağıdaki arkadaşlarımıza minnettarız: George Coe, Bob Davison, Jeff Deifik, Hal Fulton, Tadayoshi Funaba, Clemens Hintze, Kazuhiro Hiwada, Kikutani Makoto, Mike Linksvayer, Aleksi Niemelä, Lew Perin, Jared Richardson, Armin Roehrl, Conrad Schneiker, Patrick Schoenbach, ve Eric Vought. Ayrıca Addison-Wesley'deki iki Julie'ye de bu uluslararası çabayı sarfettikleri için teşekkür ediyoruz.

Birçok insan kitabın değişik kısımlarını anlamamıza yardımcı oldular. Tadayoshi Funaba, biz Date modülünü anlayıncaya kadar sayısız e-posta ile yardımcı oldu. Guy Decoux ve Clemens Hintze Ruby eklentileri hakkında sorularımızı sabırla yanıtladılar ve Masaki Suketa WinOLE modülünü anlamamıza yardımcı oldu.

Birçok özgün Ruby belgesinin Japonca olmasına rağmen, İngilizce çeviriler de gittikçe vücut buluyordu, çoğunlukla bizi şaşırtmaktan usanmayan Japon geliştiriciler tarafından çeviriler yapılıyordu. Bu çabaya emek veren birçok yazar olmasına rağmen, oldukça hacimli ve yüksek kaliteli bir belge hazırladığı ve bizlerle paylaştığı için Goto Kentaro'ya teşekkür ederiz.

Son olarak, Ruby'nin yaratıcısı Yukihiro ``Matz'' Matsumoto'ya teşekkür borçluyuz. Ona sorduğumuz soruların ve aldığımız sabırlı ve detaylı cevapların sayısını unuttuk. Gerçekten muhteşem bir dil yaratmanın yanı sıra, Matz muhteşem bir destek ve bir dilin kalkınması için gereken açık kültür örneği gösterdi.

Hepinize teşekkürler. Domo arigato gozaimasu.

Dave Thomas ve Andy Hunt
THE PRAGMATIC PROGRAMMERS
http://www.pragmaticprogrammer.com

Notation Conventions

Kitap boyunca aşağıdaki notasyonu kullanacağız:

Gerçek kod örnekleri aşağıdaki gibi gösterildi:

class SampleCode
  def run
    #...
  end
end

Metinde, Fred#doIt, Fred sınıfının örnek bir metodu simgelerken (doIt), Fred.new [Diğer Ruby dökümanlarında metotların Fred::new şeklinde verildiğini görebilirsiniz. Bu geçerli olan Ruby sözdizimidir ancak biz sadece Fred.new'in daha az dikkat dağıtıcı olduğunu düşünüyoruz.]bir sınıf metodunu belirtir ve Fred::EOF bir sınıf sabitidir.

Bu kitap birçok Ruby kod frqagmanı içerir. Mümkün olduğu kadarıyla, kod çalıştığı zaman neler olduğunu göstermeye çalıştık. Basit durumlarda, ifadelerin değerlerini aynı satırda gösterdik. Örneğin:

a = 1
b = 2
a + b » 3

Bazı zamanlar, atama durumlarındaki değerleri nasıl göstereceğimizle de ilgilendik:

a = 1 » 1
b = 2 » 2
a + b » 3

Eğer program daha karmaşık bir çıktı verirse, aşağıdaki gibi gösterdik:

3.times { puts "Hello!" }
produces:
Hello!
Hello!
Hello!

Bazı kütüphane dökümantasyonlarında, çıktıda boşlukların nerelerde olduğunu belirtmek istedik. Boşlukları ``[visible space]'' karakteri olarak göreceksiniz.

Komut satırı girdileri Roman yazı tipiyle, parametreler ise eğik yazı tipiyle gösterilmiştir. İsteğe bağlı öğeler köşeli parantezlerle belirtilmiştir.

ruby [
            flags
            ]*
             [
            progname
            ] [
            arguments
            ]+
            


Previous < Contents ^
Next >

Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Copyright © 2001 by Addison Wesley Longman, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/)).

Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.

Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.