![]() Onceki |
![]() İçindekiler |
![]() Sonraki |
| Ruby Kullanıcı Kılavuzu | Basit Örnekler |
Şimdi faktöriyel hesabı yapan basit bir fonksiyon yazalım. n faktöriyelin matematiksel tanımı aşağıdaki gibidir:
n! = 1 (n==0 ise) = n * (n-1)! (aksi taktirde)
Ruby'de bunu aşağıdaki gibi yazabiliriz:
def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end |
Tekrarlanan end deyiminin varlığını fark etmiş olmalısınız. Sırf bu yüzden Ruby "Angol benzeri" olarak anılır. (Aslında Ruby'nin syntax'ı Eiffel dilini daha çok andırmaktadır.) Ayrıca return deyiminin eksikliğini de hissetmiş olmalısınız. Bu deyim Ruby için gereksizdir çünki bir Ruby fonksiyonu değerlendirdiği en son şeyi geri döndürür. return deyimi kullanılabilir ancak gereksizdir.
Şimdi faktöriyel fonksiyonumuzu deneyelim. Ekleyeceğimiz bir satır, bize çalışan bir program sunacaktır:
# Bir sayının farktöriyelini bulan program
#fact.rb olarak kaydedin.
def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end
print fact(ARGV[0].to_i), "\n" |
Burada ARGV komut satırı argümanlarını içeren bir dizidir ve to_i alınan bir karakteri tamsayıya çevirmeye yarar.
% ruby fact.rb 1 1 % ruby fact.rb 5 120 |
Acaba argüman olarak 40 versek çalışır mı? Muhtemelen hesap makineniz taşma hatası verecektir...
% ruby fact.rb 40 815915283247897734345611269596115894272000000000 |
Bu argüman çalışır, üstelik Ruby makinenizin belleğinin izin verdiği kadar tamsayıyla çalışabilir. 400! Aşağıdaki gibi bir çıktı alacaksınız:
% ruby fact.rb 400 64034522846623895262347970319503005850702583026002959458684 44594280239716918683143627847864746326467629435057503585681 08482981628835174352289619886468029979373416541508381624264 61942352307046244325015114448670890662773914918117331955996 44070954967134529047702032243491121079759328079510154537266 72516278778900093497637657103263503315339653498683868313393 52024373788157786791506311858702618270169819740062983025308 59129834616227230455833952075961150530223608681043329725519 48526744322324386699484224042325998055516106359423769613992 31917134063858996537970147827206606320217379472010321356624 61380907794230459736069956759583609615871512991382228657857 95493616176544804532220078258184008484364155912294542753848 03558374518022675900061399560145595206127211192918105032491 00800000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000 |
Sonucun doğruluğunu kontrol edemeyiz ama öyle olması gerekiyor ^o~
Eğer Ruby'yi hiçbir argüman olmadan çağırırsanız, komutları standart girdi olarak alır ve girdinin sonunda komutları çalıştırır:
% ruby print "merhaba dunya\n" print "hoscakal dunya\n" ^D merhaba dunya hoscakal dunya |
Ruby ayrıca, kodu yazar yazmaz sonucu da gösteren, klavyeden interaftif bir döngüye girerek kod Ruby kodu yazmanızı sağlayan
eval.rb adında bir programla gelir. Bu kılavuz boyunca birçok yerde bun kullanacağız.
Eğer bir ANSI-türevi terminale sahipseniz (eğer herhangi bir UNIX türevi kullanıyorsanız öyledir; eğer DOS altındaysanız
ANSI.SYS ya da ANSI.COM'u yüklemeniz gerekecek), uyarı raporları, renk aydınlatması ve
sanal destek içeren geliştirilmiş eval.rb kullanmalısınız. Aksi takdirde,
Ruby sürümünüzün sample dizinindeki ANSI-olmayan veriyonuna bakabilirsiniz. Aşağıda kısa bir eval.rb
örneği var:
% ruby eval.rb ruby> print "Merhaba, dunya.\n" Merhaba, dunya. nil ruby> exit |
merhaba dunya print tarafından üretilmiştir.
Sonraki satırda bulunan nil, son değerlendirilen şeyi döndürür; Ruby'de durumlar ile ifadeler arasında
bir ayrım yoktur, bu yüzden bir parça kodu değerlendirmekle çalıştırmak aynı şeydir.
Burada nil print'in anlamlı bir değer döndürmediğini belirtiyor. Bu interaktif döngüden
exit ile çıkabileceğimizi unutmayın, tabii ki D^ de hala geçerlidir.
Bu kılavuz boyunca, "ruby>" bizim küçük yararlı eval.rb programımız için
girdi istemcisini destekler.
![]() Onceki |
![]() İçindekiler |
![]() Sonraki |