Ruby Programlama Dili'nin Temelleri

7,893
-1

Published on

IBM Linux'ta Ruby Programlama Dili'ni kapsamlı bir şekilde anlattığım seminer - 2006

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,893
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Ruby Programlama Dili'nin Temelleri

    1. 1. Ruby Programlama Dili'nin Temelleri Pınar Yanardağ [email_address] INETD Seminerleri@IBM Linux 16.12.2006
    2. 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)
    3. 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...
    4. 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.
    5. 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.
    6. 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.
    7. 7. RUBY'nin GENEL ÖZELLİKLERİ
    8. 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.
    9. 9. 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!" } Ruby'de herşey bir nesnedir #2
    10. 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.
    11. 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"]
    12. 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.
    13. 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
    14. 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...
    15. 15. 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 ... Platform bağımsız...
    16. 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,
    17. 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 ...
    18. 18. Yüksek trafikli web uygulamaları, İşletim sistemi gerçekleştirimleri, Derleyici gerçekleştirimleri... Ruby hangi uygulamalar için uygun değil?
    19. 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ü.
    20. 20. 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.. . Ruby nerelerde kullanılıyor? #2
    21. 21. KARŞILAŞTIRMALAR
    22. 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.
    23. 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)
    24. 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
    25. 25. 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 Java & Ruby arasındaki farklar #2
    26. 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.
    27. 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, ...
    28. 28. 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, ... PHP & Ruby arasındaki benzerlikler #2
    29. 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...
    30. 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ı,
    31. 31. 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 Python & Ruby arasındaki farklar
    32. 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 :)
    33. 33. 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... Niçin Ruby değil ?
    34. 34. KOD ÖRNEKLERİ
    35. 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"
    36. 36. Birleştirme işlemi, sozcuk = " ozgur "+" yazilim " #" ozgur yazilim " Tekrarlatma işlemi, sozcuk= sozcuk*2 #" ozgur yazilim ozgur yazilim " Dizgeler #2
    37. 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
    38. 38. Altdizge seçimi, kelime=”ruby” kelime[0..2] #“rub” kelime[0,1] #“r” kelime[-2,2] #“by” Dizgeler #4
    39. 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"]
    40. 40. Dizgeler #6 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"] Split metodu,
    41. 41. 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" Dizgeler #7
    42. 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"]
    43. 43. Diziler #2 Ruby iç içe geçmiş dizileri destekler, tek_boyutlu= ["bir", "iki", "uc"] # ["bir", "iki", "uc"] i ki_boyutlu= [“bir”, [“iki”, “iki bucuk”], “uc”] # ["bir", ["iki", "iki bucuk"], "uc"] tek_boyutla= [“bir”, [“iki”, “iki bucuk”], “uc”].flatten # ["bir", "iki", "iki bucuk", "uc"]
    44. 44. Dizideki elemanları listeleyelim, dizi= ["pinar", "tulin", "ikbal"] # nesneye yönelik tarzda : dizi.each {|kisi| puts "Hosgeldin #{kisi.capitalize!}!" } # fonksiyonel tarzda : for kisi in dizi puts "Hosgeldin #{kisi.capitalize!}!" end =begin Hosgeldin Pinar! Hosgeldin Tulin! Hosgeldin ikbal! =end Diziler #3
    45. 45. 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"] Diziler #3
    46. 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
    47. 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
    48. 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
    49. 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
    50. 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"]
    51. 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
    52. 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 hex &quot;Bu değil.&quot; #false hex &quot;Belki bu? {0x35}&quot; #false hex &quot;Ya da bu? <0x38z7e>&quot; #false hex &quot;Tamam, bu: <0xfc0004>&quot; #true Metodumuzu deneyelim:
    53. 53. Denetim Yapıları case, i=8 case i when 1,2..5 print “1..5 ” when 6..10 print “6..10 ” end # 6..10 case 'ruby programlama dili' when 'python', 'perl' print &quot;python ya da perl &quot; when /ruby/ print &quot;ruby! &quot; end # ruby!
    54. 54. Denetim Yapıları #2 sayac = 0 while satir = gets if satir =~ /Ruby/ sayac += 1 end end puts &quot;#{sayac} Ruby satırı var&quot; Girdi: Bu birinci Ruby satırı Bu ikinci Bu da üçüncü Ruby satırı ^D Çıktı: 2 Ruby satırı var While
    55. 55. Denetim Yapıları #3 for i in [200,-3.6,&quot;ruby&quot;] print &quot;#{i} (#{i.type}) &quot; end =begin 200 (Fixnum) -3.6 (Float) ruby (String) =end For,
    56. 56. Yineleyiciler (iterasyonlar) <ul> <li>Çoğu nesneye yönelik dil gibi, ruby de yineleyicilerin gücünü kullanır, </ul> <ul> </ul> <ul> </ul> <ul> <li>String türü bile, yararlı yineleyiciler içerir, </ul> <ul> <ul> <ul> <ul> <ul> <ul> <ul> <ul> <ul> <ul> </ul> </ul> </ul> </ul> </ul> </ul> </ul> </ul> </ul> </ul> <ul> <li> &quot;abc&quot;.each_byte{|c| printf &quot;<%c>&quot;, c} </ul> <ul> <li> #<a><b><c> </ul> <ul> </ul> <ul> </ul> <ul> <li> “ a b c &quot;.each_line{|l| print l} </ul> <ul> </ul> <ul> <li> #a </ul> <ul> <li> #b </ul> <ul> <li> #c </ul> <ul> </ul>
    57. 57. dizi =[200,-3.6,&quot;ruby&quot;] for i in dizi puts i end # 200 #-3.6 #ruby Yineleyiciler #2 For yineleyicisi,
    58. 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 &quot;ruby &quot; } #ruby #ruby #ruby
    59. 59. Dosya Erişimi Dosya açma işlemleri: dosya = File.new(&quot;/home/odev.txt&quot;, &quot;r&quot;) # path'de belirttiğimiz dosyayı sadece okumak için açar, dosya = File.new(path, &quot;w&quot;) # 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.
    60. 60. Dosya Erişimi #2 passwd dosyasında kullanıcı adı hexa olan kullanıcının bilgilerini bulalım: File.open(&quot;/etc/passwd&quot;).each { |line| puts line if line =~ /hexa/ } #hexa:x:1001:1001::/home/hexa:/bin/bash
    61. 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
    62. 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...
    63. 63. Miras #2 class Memeli def nefes print &quot;Nefes al, Nefes ver &quot; end end Basit bir Memeli sınıfı tanımlayalım: Ş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 def konus print &quot;Miyauvvvv &quot; end end pisi = Kedi.new pisi.nefes #Nefes al, Nefes ver pisi.konus #Miyauvvvv
    64. 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)
    65. 65. Mix-in İkinci kullanım yolu ise mix-in tekniğidir, module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end class Geo include Trig # .... end Modüller: Mix-in:
    66. 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.
    67. 67. Tekil Metotlar #2 def kisi1.konus print “Selam ” end kisi1= TekilOrnek.new kisi1.konus #Selam class TekilOrnek def konus print “Merhaba ” end end kisi1= TekilOrnek.new kisi1.konus #Merhaba kisi2= TekilOrnek.new kisi2.konus #Merhaba
    68. 68. 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> &quot;ruby &quot;*3 => &quot;ruby ruby ruby &quot; irb(main):002:0> Fixnum.superclass => Integer irb(main):003:0> 10.methods => [&quot;%&quot;, &quot;upto&quot;, &quot;<<&quot;, &quot;div&quot;, &quot;&&quot;, &quot;object_id&quot;, &quot;>>&quot;, &quot;times&quot;, &quot;singleton_methods&quot;, &quot;equal?&quot;, &quot;taint&quot;, &quot;id2name&quot;, &quot;*&quot;, &quot;succ&quot;, &quot;frozen?&quot;, &quot;instance_variable_get&quot;, &quot;+&quot;, &quot;kind_of?&quot;, &quot;round&quot;, &quot;to_a&quot;, &quot;respond_to?&quot;, &quot;-&quot;, &quot;divmod&quot;, &quot;integer?&quot;, &quot;chr&quot;, &quot;/&quot;, &quot;type&quot;, &quot;protected_methods&quot;, &quot;to_sym&quot;, &quot;|&quot;, &quot;eql?&quot;, &quot;instance_variable_set&quot;, &quot;~&quot;, &quot;hash&quot;, &quot;is_a?&quot;, &quot;truncate&quot;, &quot;between?&quot;, &quot;to_s&quot;, &quot;send&quot;, &quot;prec&quot;, &quot;modulo&quot;, &quot;singleton_method_added&quot;, &quot;class&quot;, &quot;size&quot;, &quot;zero?&quot;, &quot;tainted?&quot;, &quot;private_methods&quot;, &quot;__send__&quot;, &quot;^&quot;, &quot;untaint&quot;, &quot;+@&quot;, &quot;next&quot;, &quot;-@&quot;, &quot;id&quot;, &quot;**&quot;, &quot;step&quot;, &quot;to_i&quot;, &quot;<&quot;, &quot;inspect&quot;, &quot;<=>&quot;, &quot;method&quot;, &quot;instance_eval&quot;, &quot;==&quot;, &quot;prec_i&quot;, &quot;remainder&quot;, &quot;>&quot;, &quot;===&quot;, &quot;nonzero?&quot;, &quot;clone&quot;, &quot;public_methods&quot;, &quot;floor&quot;, &quot;extend&quot;, &quot;>=&quot;, &quot;<=&quot;, &quot;freeze&quot;, &quot;display&quot;, &quot;quo&quot;, &quot;downto&quot;, &quot;to_f&quot;, &quot;__id__&quot;, &quot;=~&quot;, &quot;methods&quot;, &quot;prec_f&quot;, &quot;abs&quot;, &quot;nil?&quot;, &quot;dup&quot;, &quot;to_int&quot;, &quot;coerce&quot;, &quot;instance_variables&quot;, &quot;[]&quot;, &quot;instance_of?&quot;, &quot;ceil&quot;] irb
    69. 69. 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. KAYNAKLAR
    70. 70. Teşekkürler...

    ×