Slideshare.net (beta)

 

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 0 (more)

Ruby Programlama Dili'nin Temelleri

From pinguar, 1 year ago

IBM Linux'ta Ruby Programlama Dili'ni kapsamlı bir şekil more

3555 views  |  0 comments  |  0 favorites  |  2 embeds (Stats)
Download not available ?
 
 
 

Groups / Events

 

 
Embed
options

More Info

CC Attribution License
This slideshow is Public
Total Views: 3555
on Slideshare: 3531
from embeds: 24

Slideshow transcript

Slide 1: Ruby Programlama Dili'nin Temelleri Pınar Yanardağ pinar@comu.edu.tr INETD Seminerleri@IBM Linux 16.12.2006

Slide 2: Ruby Ne Zaman Doğdu? Yukihiro Matsumoto (a.k.a Matz) tarafından yaratıldı. İlk temel 23 Şubat 1993 yılında atıldı. Aralık 1995'de 0.95 sürümü Japon haber listelerine duyuruldu. Bu tarihten itibaren geliştirici ve kullanıcı sayısında patlama yaşandı. Ruby, şu an Japonya'dan en çok kullanılan programlama dillerinden biri. Son kararlı sürüm 1.8.5 (29 Ağustos 2006)

Slide 3: Ruby Nasıl Doğdu? Matz'ın üniversite yıllarındaki en büyük hayali, kendi programlama dilini tasarlamaktı. Nesneye yönelik programlamanın avatajlarını, betikleme alanında göstermek istiyordu. Aradığı özelliklere uygun bir dil yoktu. Bu yüzden tasarlayacağı dilin; Perl'den daha güçlü, Python'dan daha nesneye yönelik olmasını istiyordu...

Slide 4: Ruby'nin Büyüme Hızı Nedir? Camiaya sunulduğu 1995 yılından beri dünyanın dört bir yanından programcıların ilgisini çeken bir programlama dili oldu, 2006 yılı, Ruby'nin geniş kitleler tarafından kabul gördüğü bir yıl oldu. Ruby-talk listesinin günde ortalama 200 e-posta trafiği var, TIOBE istatistiklerine göre, Ruby şu an dünyanın en popüler 11. dili. 6 ay içinde, ilk 10'a gireceği söyleniyor.

Slide 5: Ruby'nin Temel Aldığı Felsefeler Nelerdir? Programcı makinaya odaklanmak yerine, programlamanın nasıl yapıldığı ile ilgilenmeli, “We are the masters they're the slaves”... Bir şeyi yapmanın birden fazla yolu vardır, Ruby, size seçme özgürlüğü verir.

Slide 6: Ruby'nin Temel Aldığı Felsefeler Nelerdir? #2 İyi bir arayüz, Programlama dilinin sihirli kurallarına dikkat edeceğimize, pseudo kod yazar gibi programlama yapsak olmaz mı? POLS (Principle of Matz's Least Suprise) Belirsiz bir durumla karşılaşıldığında, çözüm sizi sürprize uğratmayacak olanıdır.

Slide 7: RUBY'nin GENEL ÖZELLİKLERİ

Slide 8: Ruby'de herşey bir nesnedir Ruby yüzde yüz saf nesneye yönelik bir dildir, Ruby'de her kod parçasına kendisine ait özellikler ve olaylar verilebilir, Özellikler -> Örnek değişkenler (instance variables), Olaylar -> Metotlar ile gerçekleştirilir. Yönlendirdiğiniz herşey ve bunların döndürdüğü sonuçlar birer nesnedir.

Slide 9: Ruby'de herşey bir nesnedir #2 Metotlar nesneye bir mesaj yollanarak uyandırılırlar, number = Math.abs(number) //Java number = number.abs #Ruby Bir sayıya bile olay verebiliriz! 5.times { puts "We *love* Ruby!" }

Slide 10: Ruby Esnektir... Ruby kullanıcıları kısıtlamaz, Beğenmediğiniz kısımları değiştirebilir, yeniden tanımlayabilirsiniz. Toplama işlemini + operatörü ile değil, topla diye bir metodla yapmak istiyorum? class Numeric def topla(x) self.+(x) end end y = 2.topla 3 # y'nin değeri 5 oldu.

Slide 11: Ruby gücünü bloklardan alır... Blok kavramı, Ruby'nin esnek bir dil olmasının nedenlerinden biridir, Ruby'de herhangi bir metoda blok koyabilirsiniz. Ruby'nin blokları fonksiyonel dillerden esinlenilerek yaratılmıştır, Matz, blok kavramını Lisp dilinden aldığını ifade etmiştir. search_engines = %w[Google Yahoo MSN].map do |engine| "http://www." + engine.downcase + ".com" end ["http://www.google.com", "http://www.yahoo.com", "http://www.msn.com"]

Slide 12: Mix-in tekniği? Ruby, özellikle yalnızca tekli mirası destekler, Modül kavramı, çoklu mirası gerçekleştirmek için daha iyi bir yöntemdir. Bir sınıf, bir modül ile karıştırılabilir (mix-in), Böylece modülün metodlarına sahip olur. class MyArray include Enumerable end #each yöntemi varsa, sort ve find yöntemlerini bedava aldık.

Slide 13: Dinamik tanımlanan bir dil... Ruby değişken tanımlamalarını duck-typing paradigmasına göre yapar, Değişken tanımlamak gereksiz! String dizge; dizge=”pinar”; dizge=”pinar” Değişkenlerin yaşam alanı basit kurallarla belirleniyor, degisken # yerel değişken @degisken # örnek değişken $degisken # global değişken

Slide 14: Türemiş bir dil... Ruby, bir çok programlama dilinden özellikler almıştır; - Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell... Tekerleği yeniden keşfetmeye gerek yok, Bozulmamış olanı düzeltmeye gerek yok, İnsanların varolan tecrübelerinden faydalanmak her zaman iyidir...

Slide 15: Platform bağımsız... Doğrudan Sistem Çağrıları Gönderebilme, UNIX'teki tüm sistem çağrılarına erişebiliyor, Win32 API'si sayesinde, tüm sistem çağrılarına erişebiliyor. Yüksek Taşınabilirlik, Linux üzerinde geliştirilse de diğer işletim sistemleri üzerinde de çalışabilir, UNIX, DOS, Windows 95/98/Me/NT/2000/XP, MacOS, BeOS, OS/2 ...

Slide 16: Ve daha pek çok iştah kabartan özellik! Kolay hata yakalama mekanizması, Güçlü metin işleme ve düzenli ifadeler, Mark & Sweep çöp toplayıcısı, C kodlarını koda gömmek Perl ve Python'a göre daha kolay,

Slide 17: Ruby hangi uygulamalar için uygun? Metin işleme, CGI programlama, Web programlama, XML programlama, GUI uygulamaları, Yapay zeka ve keşifsel matematik, Genel programlama, Programlama eğitimleri, Extreme programlama ...

Slide 18: Ruby hangi uygulamalar için uygun değil? Yüksek trafikli web uygulamaları, İşletim sistemi gerçekleştirimleri, Derleyici gerçekleştirimleri...

Slide 19: Ruby nerelerde kullanılıyor? Simülasyonlarda, NASA ve Motorola, bazı simülasyonlarını yapmak için Ruby'yi kullanıyor. Robotbilimde, Siemens, bir servis robotunun kontrolünü sağlamak için Ruby'yi kullandı. Oyunlarda, Japonya'da ticari bir oyun firması, Ruby ile geliştirdiği RPG oyununu Haziran 2004'te piyasaya sürdü.

Slide 20: Ruby nerelerde kullanılıyor? #2 Telefonculukta, UCB, kablosuz telefonları ve trafiğin yükünü kontrol etmek için Ruby'yi kullanıyor. 3G kablosuz telefonculuk şirketi, ~150K'lık C++ koduna karşı, ~6K'lık Ruby kodunu kullandı. Bilimde, Yüksek yoğunluklu yıldız sistemlerinin modellemesi üzerinde çalışan ACS şirketi de projelerinde Ruby kullanıyor...

Slide 21: KARŞILAŞTIRMALAR

Slide 22: Java vs Ruby Java, gelişmiş, test edilmiş ve Ruby'ye göre hızlı bir dil. Peki o zaman niçin Ruby'ye geçelim? Ancak bir o kadar da gereksiz sözcüklerle dolu. Ruby kullanarak, aynı kodu çok daha kısa sürede ve çok daha az satırda yazabilirsiniz.

Slide 23: Java & Ruby arasındaki benzerlikler Otomatik çöp toplayıcısı, Değişkenlerin tiplerine uygun içerikte olup olmadığının sıkı kontrolü (strongly typed), Public, protected ve private metotlar, Gömülü dosya aracı (Rdoc ~ Javadoc'a benziyor)

Slide 24: Java & Ruby arasındaki farklar Yazdığınız kodu derlemenize gerek yoktur, direkt olarak çalıştırabilirsiniz, Her şey birer nesnedir (3.15, 5 vs...) Değişken tipi tanımlamaya gerek yoktur, int[] a = {1,2,3}; # java a = [1,2,3] # ruby

Slide 25: Java & Ruby arasındaki farklar #2 Ruby'de yapılan her işlem nesneye mesaj olarak geçer, number = Math.abs(number) // Java number = number.abs # Ruby Bazı kavramlar, #ruby //java require import nil null self this mix-in'ler interface'ler

Slide 26: PHP vs Ruby PHP, web uygulamaları için çok kullanılan yaygın bir dil. Peki o zaman Ruby ile neden ilgileneyim? Ruby on Rails (RoR) kullanmak istiyorsanız, Ya da daha geniş amaçlar için kullanılan bir dil arıyorsanız göz atmakta fayda var.

Slide 27: PHP & Ruby arasındaki benzerlikler Değişken tipleri dinamik olarak tanımlanıyor (dynamic typing) Public, protected, private erişim mekanizmaları, Geniş bir standart kütüphaneye sahipler, ...

Slide 28: PHP & Ruby arasındaki benzerlikler #2 Ruby, strong typing bir dil (dönüştürmeler için to_s, to_i, ...), Dizgeler, sayılar, diziler birer nesne, Soyut sınıf ya da arayüz yoktur, Ruby'de her işlem nesneye mesaj olarak geçer, ...

Slide 29: Python vs Ruby Python da tıpkı Ruby gibi genel amaçlı bir dildir, Python ~ Ruby (ya da tam tersi) göç çok kolaydır, Ruby kullanmak size Python'dan daha fazla syntax öğretebilir...

Slide 30: Python & Ruby arasındaki benzerlikler İkisinde de interaktif komut satırı vardır (ipython ~ irb), Komut satırından döküman okuyabilirsiniz (pydoc ~ ri), Nesneler strong ve dynamic type'dır, Gömülü belgeleme araçları,

Slide 31: Python & Ruby arasındaki farklar Tüm işlemler nesneye mesaj olarak geçer, Python'da metotların haricinde fonksiyonlar yazmak mümkündür, Ruby'de miras mix-in tekniği ile gerçekleştirilir, Python'da çoklu miras vardır, Bazı sözcük farklılıkları, #ruby #python require import elsif elif

Slide 32: Niçin Ruby? Basit; öğrenmesi ve kodlaması kolay, Güçlü, Zengin kütüphaneler, Hızlı geliştirme, Yardımsever Ruby topluluğu, Açık kaynak kodlu, Eğlenceli :)

Slide 33: Niçin Ruby değil ? Performans Tıpkı Perl ya da Python gibi, C kodu ile sarılsa dahi yeterince hızlı değil, İyi bir VM'ye sahip değil, Ruby2, RITE... Varolan dahili standartlar, Deneyim, İyi bilinen bir dil değil; belgelendirme çok az, Çok az deneyimli coder...

Slide 34: KOD ÖRNEKLERİ

Slide 35: Dizgeler (String'ler) Tek, çift tırnak? ifade= "1 2 3 4 5 #{2*3} 7 8 9 10" # "1 2 3 4 5 6 7 8 9 10" ifade= '1 2 3 4 5 #{2*3} 7 8 9 10' # "1 2 3 4 5 #{2*3} 7 8 9 10"

Slide 36: Dizgeler #2 Birleştirme işlemi, sozcuk = " ozgur "+" yazilim " #" ozgur yazilim " Tekrarlatma işlemi, sozcuk= sozcuk*2 #" ozgur yazilim ozgur yazilim "

Slide 37: Dizgeler #3 Karakter seçimi, kelime=”ruby” kelime[0] #114, r harfinin ASCII kodu kelime[-1] #121, y harfinin ASCII kodu Eşitlik kontrolü, kelime= “ruby” kelime == “ruby” #true kelime == “perl” #false

Slide 38: Dizgeler #4 Altdizge seçimi, kelime=”ruby” kelime[0..2] #“rub” kelime[0,1] #“r” kelime[-2,2] #“by”

Slide 39: Dizgeler #5 Değişkenlerin değerini geçici değişkenler kullanmadan değiştirebiliriz! v1, v2 = v2, v1 x, y, z = %w(Kestane Gurgen Palamut) #["Kestane", "Gurgen", "Palamut"] x, y, z = y, z, x #["Gurgen", "Palamut", "Kestane"]

Slide 40: Dizgeler #6 Split metodu, string = "ruby programlama dili" print "cumlede gecen harfler: ", string.split('').uniq.sort, " " #cumlede gecen harfler: abdgilmopruy ip_adresi= “192.168.0.1” ip_adresi.split(“.”) #["192", "168", "0", "1"]

Slide 41: Dizgeler #7 Bir cümleyi tersine çevirelim, cumle=”ruby programlama dili” ters_byte = cumle.reverse # "ilid amalmargorp ybur" ters_kelime = cumle.split(" ").reverse.join(" ") # "dili programlama ruby" Büyük harf, küçük harf dönüşümleri, x = "ruby on rails".upcase # "RUBY ON RAiLS" x.downcase! # "ruby on rails" x.capitalize! # "Ruby on rails"

Slide 42: Diziler Ruby'de dizilere farklı türden nesneler atayabilirsiniz, dizi=[1.9,3,"ruby"] # [1.9,3, "ruby"] Dizileri de , aynı dizgeler gibi birleştirebilir, ya da tekrar ettirebilirsiniz, dizi + [“programlama”, “dili”] # [1.9,3, "ruby","programlama", "dili"] dizi*2 # [1.9,3, "ruby",1.9,3,"ruby"]

Slide 43: Diziler #2 Ruby iç içe geçmiş dizileri destekler, tek_boyutlu= ["bir", "iki", "uc"] # ["bir", "iki", "uc"] iki_boyutlu= [“bir”, [“iki”, “iki bucuk”], “uc”] # ["bir", ["iki", "iki bucuk"], "uc"] tek_boyutla= [“bir”, [“iki”, “iki bucuk”], “uc”].flatten # ["bir", "iki", "iki bucuk", "uc"]

Slide 44: Diziler #3 Dizideki elemanları listeleyelim, dizi= ["pinar", "tulin", "ikbal"] # nesneye yönelik tarzda : =begin dizi.each {|kisi| Hosgeldin Pinar! puts "Hosgeldin #{kisi.capitalize!}!" Hosgeldin Tulin! } Hosgeldin ikbal! =end # fonksiyonel tarzda : for kisi in dizi puts "Hosgeldin #{kisi.capitalize!}!" end

Slide 45: Diziler #3 Ruby'de dizileri to_s metoduyla dizgeye, dizgeleri de to_a metoduyla diziye dönüştürebiliriz; dizi = [“12”,21,”ruby”] dizi.to_s # "1221ruby" join dizge= dizi.join(“:”) # “12:21:ruby” dizge.to_a # ["12:21:ruby"] split dizge.split(":") # ["12", "21", "ruby"]

Slide 46: Hash'ler yas = { "Pinar",21, "Tulin",51, "Ikbal",85 } # {"Ikbal"=>85, "Tulin"=>51, "Pinar"=>21} yas["Pinar"] = 21 yas["Tulin"] = 51 yas["Ikbal"] = 85

Slide 47: Hashler #2 Hash'e eleman ekleyelim: hash[key] = value yas["Ozgur"]= 22 #22 puts "Kisiler: ", yas.keys =begin Kisiler: Ikbal Ozgur Tulin Pinar =end

Slide 48: Hashler #3 Acaba vereceğimiz anahtar değere karşılık gelen bir değer var mı? if (dizi.has_key?(“Pinar”)) puts “Zaten var...!” else puts “Boyle bir anahtar bulunmuyor.” end # Zaten var...! [ "Figen", "Sule" ].each { |name| print name, " ailenin ", yas.has_key?(name) ? "bir ferdidir" : "bir ferdi degildir", " " } #Figen ailenin bir ferdi degildir #Sule ailenin bir ferdi degildir

Slide 49: Hashler #4 Eleman silmek? yas.delete("Pinar") #{"Ikbal"=>85, "Ozgur"=>22, "Tulin"=>51} Hash'i dolaşmak? yas.each { |key, value| puts "Isim: #{key}, Yas: #{value}" } =begin Isim: Ikbal, Yas: 85 Isim: Ozgur, Yas: 22 Isim: Tulin, Yas: 51 =end

Slide 50: Hashler #5 İki hash'de aynı olan ya da farklı olan anahtarları nasıl tespit ederiz? ogr_no={“Pinar”, 30401012, “Figen”, 40401022} #{"Figen"=>40401022, "Pinar"=>30401012} İkisinde de var olan anahtarlar? genel= yas.keys & ogr_no.keys #["Pinar"] Birinci hash'de olup da ikincisinde olmayan anahtarlar? farkli= yas.keys - ogr_no.keys # ["Ikbal", "Ozgur", "Tulin"]

Slide 51: Düzenli İfadeler Düzenli ifadeler, bir dizgenin verilen şablona uyup uymadığını bulmaya yarar, Ruby'de düzenli ifadeler (regex) ters bölü işaretleri arasına yazılır, /regex/ tanımlaması yapıldığı an yeni bir Regexp nesnesi yaratılır. =~ bulduğu dizgenin konumunu, aksi halde nil değerini döndürür, ifade = "ruby programlama dili" ifade =~ /programlama/ #5

Slide 52: Düzenli İfadeler #2 < > işaretleri arasında, onaltılık sayı olup olmadığını kontrol edelim... def hex(s) (s =~ /<0(x|X)(d|[a-f]|[A-F])+>/) != nil end Metodumuzu deneyelim: hex "Bu değil." #false hex "Belki bu? {0x35}" #false hex "Ya da bu? <0x38z7e>" #false hex "Tamam, bu: <0xfc0004>" #true

Slide 53: Denetim Yapıları case, i=8 case 'ruby programlama dili' case i when 'python', 'perl' when 1,2..5 print "python ya da perl " print “1..5 ” when /ruby/ when 6..10 print "ruby! " print “6..10 ” end end # ruby! # 6..10

Slide 54: Denetim Yapıları #2 While sayac = 0 Girdi: while satir = gets Bu birinci Ruby satırı if satir =~ /Ruby/ Bu ikinci Bu da üçüncü Ruby satırı sayac += 1 ^D end Çıktı: end 2 Ruby satırı var puts "#{sayac} Ruby satırı var"

Slide 55: Denetim Yapıları #3 For, =begin for i in [200,-3.6,"ruby"] 200 (Fixnum) -3.6 (Float) print "#{i} (#{i.type}) " ruby (String) end =end

Slide 56: Yineleyiciler (iterasyonlar) Çoğu nesneye yönelik dil gibi, ruby de yineleyicilerin gücünü kullanır, String türü bile, yararlı yineleyiciler içerir, "abc".each_byte{|c| printf "<%c>", c} #<a><b><c> “a b c ".each_line{|l| print l} #a #b #c

Slide 57: Yineleyiciler #2 For yineleyicisi, dizi =[200,-3.6,"ruby"] for i in dizi puts i end # 200 #-3.6 #ruby

Slide 58: Yineleyiciler #3 Yield, denetimi yineleyiciye parametre olarak geçilen kod bloğuna verir.. def repeat(num) while num > 0 yield num -= 1 end end repeat(3) { print "ruby " } #ruby #ruby #ruby

Slide 59: Dosya Erişimi Dosya açma işlemleri: dosya = File.new("/home/odev.txt", "r") # path'de belirttiğimiz dosyayı sadece okumak için açar, dosya = File.new(path, "w") # path'de belirttiğimiz dosyayı yazmak için açar, dosya = File.open(“/home/odev.txt”, File::WRONLY|File::CREAT, 0666) # path kısmında belirtilen dosyayı yazmak için aç. Eğer dosya yoksa, 666 izni ile beraber bu dosyayı yarat.

Slide 60: Dosya Erişimi #2 passwd dosyasında kullanıcı adı hexa olan kullanıcının bilgilerini bulalım: File.open("/etc/passwd").each { |line| puts line if line =~ /hexa/ } #hexa:x:1001:1001::/home/hexa:/bin/bash

Slide 61: Dosya Erişimi #3 Harici bir temp dosyası kullanmadan, dosyanın içeriğini nasıl değiştiririz? File.open('/home/moon/dosya.txt', 'r+') do |f| lines = f.readlines lines.each do |it| it.gsub!(/pinar/, 'pinguar') end f.pos = 0 f.print lines f.truncate(f.pos) end

Slide 62: Miras Ruby'de miras denince kastedilen tekli mirastır, Ruby'nin tasarım sürecinde, tekli miras kavramının daha anlaşılır ve daha az karmaşık olduğu kabul edilmiş ve çoklu miras gerçeklenmemiştir. Gerçek hayatta yaptığımız sınıflandırmalar son derece hiyerarşiktir, Küçük sınıflar büyük sınıfların karakteristik özelliklerini miras alırlar, Eğer bütün memeliler nefes alabiliyorsa, bütün kediler de nefes alıyor demektir...

Slide 63: Miras #2 Basit bir Memeli sınıfı tanımlayalım: class Memeli def nefes print "Nefes al, Nefes ver " end end Şimdi de bir Kedi sınıfı tanımlayalım, ancak bu sınıfın Memeli sınıfının alt sınıfı olduğunu belirtelim: class Kedi<Memeli pisi = Kedi.new def konus print "Miyauvvvv " pisi.nefes end #Nefes al, Nefes ver end pisi.konus #Miyauvvvv

Slide 64: Modüller & Mix-in Ruby'de modüllerin ve sınıfların ilk harfi büyük olmak zorundadır, Modüller module ... end şeklinde tanımlanır. Modüller iki amaç için kullanılabilir, İlki iişkili yöntemler ve sabitlerin bir araya toplandığı modüllerdir: Örneğin standart kitaplıktaki Math modülü: Math.sqrt(2) #1.41421 include Math Math::PI #3.14159 sqrt(3)

Slide 65: Mix-in İkinci kullanım yolu ise mix-in tekniğidir, Mix-in: Modüller: module Trig class Geo PI = 3.141592654 include Trig def Trig.sin(x) # .... # .. end end def Trig.cos(x) # .. end end

Slide 66: Tekil Metotlar Bir örneğin davranışı mensup olduğu sınıf tarafından belirlenir, Fakat bazen belirli bir örneğin özel bir davranışı olmasını isteyebiliriz... Çözüm : Tekil (singleton) metotlar... Tekil metotlar, genelde GUI tasarlarken değişik düğmelerin değişik eylemler yapması istendiği zaman kullanılır.

Slide 67: Tekil Metotlar #2 class TekilOrnek def konus print “Merhaba ” def kisi1.konus end print “Selam ” end end kisi1= TekilOrnek.new kisi1.konus kisi1= TekilOrnek.new #Selam kisi1.konus #Merhaba kisi2= TekilOrnek.new kisi2.konus #Merhaba

Slide 68: irb irb; Ruby ifadelerini stdin'den okuyarak anlık çalıştırmaya ve sonuçları görmenize yarayan bir araçtır; moon@debian:~$ irb irb(main):001:0> "ruby "*3 => "ruby ruby ruby " irb(main):002:0> Fixnum.superclass => Integer irb(main):003:0> 10.methods => ["%", "upto", "<<", "div", "&", "object_id", ">>", "times", "singleton_methods", "equal?", "taint", "id2name", "*", "succ", "frozen?", "instance_variable_get", "+", "kind_of?", "round", "to_a", "respond_to?", "-", "divmod", "integer?", "chr", "/", "type", "protected_methods", "to_sym", "|", "eql?", "instance_variable_set", "~", "hash", "is_a?", "truncate", "between?", "to_s", "send", "prec", "modulo", "singleton_method_added", "class", "size", "zero?", "tainted?", "private_methods", "__send__", "^", "untaint", "+@", "next", "-@", "id", "**", "step", "to_i", "<", "inspect", "<=>", "method", "instance_eval", "==", "prec_i", "remainder", ">", "===", "nonzero?", "clone", "public_methods", "floor", "extend", ">=", "<=", "freeze", "display", "quo", "downto", "to_f", "__id__", "=~", "methods", "prec_f", "abs", "nil?", "dup", "to_int", "coerce", "instance_variables", "[]", "instance_of?", "ceil"]

Slide 69: KAYNAKLAR http://docs.comu.edu.tr/howto/ruby-ug.html http://www.ruby-doc.org/docs/ProgrammingRuby/ http://pleac.sourceforge.net/pleac_ruby/ http://www.ruby-lang.org/en/ http://www.rubyist.net/~matz/slides/ http://www.rubygarden.com/ruby?RealWorldRuby http://pine.fm/LearnToProgram/ http://www.tiobe.com/tpci.htm Bu seminerin notlarını seminer.pinguar.org adresinden alabilirsiniz.

Slide 70: Teşekkürler...