SlideShare una empresa de Scribd logo
1 de 44

      
       
      
     
      
       Ruby Programlama Dili 
      
     
      
       
      
     
      
       Pınar Yanardağ 
      
     
      
       [email_address]

      
       İçerik 
      
     
      
       
      
     
      
       Ruby'nin Tarihçesi 
      
     
      
       Temel Felsefesi 
      
     
      
       Genel Özellikleri 
      
     
      
       Kullanım Alanları 
      
     
      
       Diğer Dillerle Karşılaştırmalar 
      
     
      
       Basit Kod Örnekleri

      
       Ruby'nin Kısa Tarihçesi 
      
     
      
       
      
     
      
       Yukihiro Matsumoto (a.k.a  Matz ) tarafından yaratıldı. 
      
     
      
       24 Şubat 1993 yılında geliştirilmeye başlandı. 
       
       Aralık 1995'de, Ruby 0.95 sürümü Japon haber listelerine duyuruldu. 
      
     
      
       
      
     
      
       
      
     
      
       Son kararlı sürümü, 1.8.4 (Aralık 2005)

      
       Matz, Ruby'yi Niçin Yarattı? 
      
     
      
       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. 
      
     
      
       Üniversite yıllarındaki en büyük hayali, kendi programlama dilini tasarlamaktı.

      
       Ruby Adı, Nereden Geliyor? 
      
     
      
       Ruby dilinin tasarım amaçları arasında, Perl'den daha güçlü bir dil olması yatıyor. 
      
     
      
       Perl (pearl), Haziran ayını simgeleyen bir burç taşı. 
       
       Ruby ise, Temmuz ayını simgeliyor. 
      
     
      
       İyi bir isim, dizaynın %80'inin bitmiş olduğu anlamına geliyor. 
       
       İyi bir isim, motivasyonu sağlıyor, ve çalışmaya teşvik ediyor. 
      
     
      
       Programlama dillerinde, en önemli şey isimdir. İyi bir isme sahip olmayan bir programlama dili, başarıya ulaşamaz. Geçenlerde çok iyi bir isim buldum ve şimdi uygun bir dil arıyorum. 
       Donald Knuth

      
       Ruby'nin Temel Felsefesi - 1 
      
     
      
       İyi Arayüz Prensibi; 
       
       Programlama dilleri, arayüz olarak kabul edilebilir. İyi arayüzün özellikleri; 
       
       - Uyumluluk, 
       - Esneklik, 
       - Özlülük 
      
     
      
       Özlülük Prensibi;  ( we are the masters they're the slaves ) 
       
       Ruby'nin ana felsefesine göre, programcı makinaya odaklanmak yerine, programlamanın nasıl yapıldığına odaklanmalıdır.

      
       Ruby'nin Temel Felsefesi - 2 
      
     
      
       Mükemmel Programlama Dili Yoktur; 
       
       Programlama dillerine iki tür bakış vardır, 
       
       - Programlama dili ile neler yapabileceğiniz, 
       - Programlama yaparken kendinizi nasıl hissettiğiniz. 
       
       
      
     
      
       Özgürlük ve Rahatlık; 
       
       Birşeyi yapmanın birden çok yolu vardır. 
       
       Ruby, size seçme özgürlüğü verir.

      
       Ruby'nin Temel Felsefesi - 3 
      
     
      
       Ruby'den Haz Almak;  
       
       Programlama dilinin sihirli kurallarına dikkat etmek yerine, çözeceğiniz probleme odaklanın. 
       
       Eğer, yazdığınız pseudo kodlar bilgisayarınızda direkt çalışırsa, ne hissederdiniz? 
      
     
      
       En Az Sürpriz Prensibi (Principle of Matz's Least Suprise); 
       
       Ruby'nin amacı, programlamada harcanan eforu en aza indirmektir. 
       
       Belirsiz durumlarla karşılaştığınızda, çözüm sizi sürprize uğratmayacak olanıdır.

      
       Ruby'nin Genel Özellikleri - 1 
      
     
      
       Nesneye yönelik ;  
       
       - Ruby, yüzde yüz saf nesneye yönelik bir dildir (Smalltalk gibi, bu konuda hiçbir istisna kabul etmez). 
       
       -  Yönlendirdiğiniz herşey ve bunların döndürdüğü sonuçlar birer nesnedir, 
       
       - Metotlar, nesneye bir mesaj yollayarak uyandırılırlar, 
       - number = Math.abs(number)  // Java  
       - number = number.abs  //  Ruby 
       
       1 + 2 
       + ( 2 argümanı ile birlikte) , 1 nesnesine mesaj gönderiliyor.

      
       Özel Nesneye Yönelik Özellikler;  
       
       
       - Ruby tekil mirası destekler,  ancak çoklu miras gerçekleştirimini şık bir yolla sağlar, 
       
       
       - Mix-in tekniği, 
       
       
       - Tekil metotlar ... 
       
       
       
      
     
      
       Ruby'nin Genel Özellikleri - 2

      
       Ruby'nin Genel Özellikleri - 3 
      
     
      
       Betikleme Dili;, 
       
       Ruby'nin Betikleme Özellikleri; 
       
       
       - Çoğu betikleme dili gibi, yorumlayıcı sayesinde , edit- run- edit tekniğiyle hızlı geliştirme olanağı sağlar. Derlemeye ihtiyaç duymaz. 
       
       
       - Daha az kod yazmanız gerektiği için, hızlı programlama yaparsınız.

      
       Betikleme Mi! 
       
       - Betik dilleri; sıradüzensel interaktif komutlar bütününden, tam anlamıyla donatılmış programlama dillerine dönüştü. 
       
       - Yakın bir zamana kadar, kimse betik dilleriyle  gerçek  uygulamalar yazmayı düşünmüyordu. 
       
       - Ancak bugün betikleme dilleri, çeşitli işlere hizmet ediyorlar; 
       
       - Kişisel yönetici araçları, 
       - Web uygulama framework'leri, 
       - Gerçek dünya uygulamaları, 
       - Devasa verilerin analizleri ... 
       
      
     
      
       Ruby'nin Genel Özellikleri - 4

      
       Ruby'nin Genel Özellikleri - 5 
      
     
      
       Yorumlanan (interpreted) Bir Dil; 
       
       Avantaj, ya da Dezavantaj? 
       
       -  Betik dilleri için hızlı geliştirme, 
       
       - Kodlar tek başına çalıştırılabilir uygulama haline dönüştürülemez. 
       
       - Performans düşüklüğü/yavaşlık ...?

      
       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. 
       
      
     
      
       Eğer birçoklarından daha ileriyi görebilmişsem, bu devlerin omuzlarında durup ileriye bakmamdan ötürüdür olmuştur.  
       Isaac Newton 
       
      
     
      
       Ruby'nin Genel Özellikleri - 6

      
       Ruby'nin Genel Özellikleri - 7 
      
     
      
       Dinamik Tanımlama; 
       
       - Değişken bildirimleri gereksiz; 
       
       - Değişkenlerin yaşam sınırları basit kurallarla belirleniyor; 
       
       - “degisken”  =  yerel değişken 
       - “@degisken”'  =  örnek değişken 
       - “$degisken”  =  global değişken 
       
       - Değişkenlerin türü yoktur.

      
       
       Söz dizimi basit ve tutarlı;  
      
     
      
       moon@debian:~$ irb 
       irb(main):001:0> dizi = [1.5, "Ruby", 6] 
       => [1.5, "Ruby", 6] 
       irb(main):002:0> dizi[1] 
       => "Ruby" 
       irb(main):003:0> dizi[-1] 
       => 6 
       irb(main):004:0> dizi << &quot;Rails&quot; 
       => [1.5, &quot;Ruby&quot;, 6, &quot;Rails&quot;] 
       irb(main):005:0> dizi2 = dizi [1,2] 
       => [&quot;Ruby&quot;, 6] 
       irb(main):006:0> dizi2 
       => [&quot;Ruby&quot;, 6] 
      
     
      
       Ruby'nin Genel Özellikleri - 8

      
       Ruby'nin Genel Özellikleri- 9 
      
     
      
       Kolay ve Hızlı; 
       
       - Güçlü metin işleme ve düzenli ifadelere sahiptir, 
       
       
       - Bellek yönetimi otomatiktir, 
       
       
       - Hata yakalama mekanizmaları bulunur, 
       
       
       - Otomatik çöp toplayıcısına sahiptir.

      
       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. 
       
      
     
      
       Ruby'nin Genel Özellikleri- 10 
      
     
      
       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 ...

      
       Ruby, Hangi Uygulamalar İç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 ...

      
       Yüksek trafikli web uygulamalarında, 
       
       
       
       İşletim sistemi gerçekleştirimlerinde, 
       
       
       
       Derleyici gerçekleştirimlerinde ... 
       
       
       
      
     
      
       Ruby, Hangi Uygulamalar İçin Uygun Değil?

      
       Karşılaştırmalar: Ruby vs. Java -1  
      
     
      
       Typing; 
       
       Ruby;  dinamik yazımlı, 
       Java;  statik yazımlı 
      
     
      
       Miras; 
       
       Ruby;  mix-in, 
       Java;  tekli miras (interface -> mix-in) 
      
     
      
       
      
     
      
       Aktif nesne; 
       
       Ruby;  self, 
       
       Java;  this

      
       İşleyiş; 
       
       Ruby;  Yorumlanan, 
       Java;  Bytecode 
      
     
      
       Saflık ; 
       
       Ruby;  Her şey birer nesne, 
       
       Yapılan her işlem, nesneye mesaj olarak geçiyor, 
       Java;  Nesne olmayan kısımlar var 
      
     
      
       Karşılaştırmalar: Ruby vs. Java -2  
      
     
      
       
      
     
      
       
      
     
      
       
      
     
      
       Java'nın sanal makinası daha hızlı.

      
       Karşılaştırmalar: Ruby vs. Perl -1 
      
     
      
       Saflık; 
       
       Ruby;  Herşey bir nesne, 
       
       Perl;  Nesne olmayan şeyler var 
      
     
      
       Miras; 
       
       Ruby,  Mix-in, 
       
       Perl,  Çoklu miras

      
       Karşılaştırmalar: Ruby vs. Perl -2 
      
     
      
       Ruby, Perl'e göre öğrenmesi ve  kullanması daha kolay bir dil, ve daha basit söz dizimine sahip, 
      
     
      
       Ruby'de  $@%  kodları, veri tipleri için değil, değişkenlerin yaşam alanını belirlemek için kullanılır. 
      
     
      
       Perl, Ruby'ye göre daha hızlı, ve Unicode desteğine sahip.

      
       Karşılaştırmalar: Ruby vs. Python -1 
      
     
      
       Saflık;  
       
       Ruby,  Tüm işlemler nesneye mesaj olarak geçer, 
       
       Python,  Metotların haricinde, fonksiyonlar yazmak da mümkündür. 
      
     
      
       -3.abs 
      
     
      
       abs(-3) 
      
     
      
       Miras;  
       
       Ruby,  Mix-in, 
       
       Python,  Çoklu miras

      
       def + (x) 
       x+5 
       end 
      
     
      
       Karşılaştırmalar: Ruby vs. Python -2 
      
     
      
       Ruby, daha doğal bir operator overloading'e sahiptir, 
      
     
      
       Ruby, çoğu zaman Python'dan daha hızlı,

      
       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  :)

      
       Niçin Ruby Değil? 
      
     
      
       
       
      
     
      
       Performans; 
       
       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, 
       
       Unicode desteği tümleşik değil, 
       
       Deneyim , 
       
       İyi bilinen bir dil değil; belgelendirme çok az, 
       
       Çok az, deneyimli coder...

      
       Ruby Nerelerde Kullanılıyor?  -1 
      
     
      
       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ü,

      
       
       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

      
       Basit Kod Örnekleri 1- Başlangıç 
      
     
      
       puts “Merhaba Dünya!” 
       Merhaba Dünya! 
       
       
       print “Merhaba Dünya!” 
       Merhaba Dünya! 
       
       
       print “Merhaba”+”Dünya!”+”” 
       Merhaba Dünya! 
       
       
       print “Merhaba”, “Dünya!”,”” 
       Merhaba Dünya!

      
       Basit Kod Örnekleri 2 – Dizgeler 1 
      
     
      
       Tek, çift tırnak? 
       
       ifade=  &quot;1 2 3 4 5 #{2*3} 7 8 9 10&quot; 
       &quot;1 2 3 4 5 6 7 8 9 10&quot; 
       ifade=  '1 2 3 4 5 #{2*3} 7 8 9 10' 
       &quot;1 2 3 4 5 {2*3} 7 8 9 10&quot; 
      
     
      
       Birleştirme işlemi; 
       
       sozcuk = &quot; ozgur &quot;+&quot; yazilim &quot; 
       &quot; ozgur yazilim &quot; 
       
       Tekrarlatma işlemi;  
       
       sozcuk= sozcuk*2 
       &quot; ozgur  yazilim  ozgur  yazilim &quot;

      
       Basit Kod Örnekleri 3 – Dizgeler 2 
      
     
      
       Karakter seçimi;  
       
       kelime=”ruby”  
       
       kelime[0] 
       114  # r harfinin ASCII kodu 
       kelime[-1] 
       121  # y harfinin ASCII kodu 
       
       Eşitlik kontrolü; 
       
       kelime= “ruby” 
       &quot;ruby&quot; == &quot;ruby&quot; 
       true 
       &quot;ruby&quot; == &quot;perl&quot; 
       false

      
       
       Altdizge seçimi; 
       
       kelime=”ruby” 
       
       kelime[0..2] 
       “ rub” 
       
       kelime[0,1] 
       “ r” 
       
       kelime[-2,2] 
       “ by” 
       
       
      
     
      
       Basit Kod Örnekleri 4 – Dizgeler 3

      
       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 
      
     
      
       Basit Kod Örnekleri 5 – 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, 
       
      
     
      
       
      
     
      
       def hex(s)  
       (s =~ /<0(x|X)(|[a-f]|[A-F])+>/) != nil 
       end 
      
     
      
       < > işaretleri arasında, onaltılık sayı olup olmadığını kontrol edeceğiz

      
       Basit Kod Örnekleri 6 – Diziler 1 
      
     
      
       Ruby'de dizilere farklı türden nesneler atayabilirsiniz, 
       
       dizi=[1.9,3,&quot;ruby&quot;] 
       [1.9,3, &quot;ruby&quot;] 
       
       
       
       Dizileri de , aynı dizgeler gibi birleştirebilir, ya da tekrar ettirebilirsiniz,  
       
       dizi + [“programlama”, “dili”] 
       [1.9,3, &quot;ruby&quot;,&quot;programlama&quot;, &quot;dili&quot;] 
       
       dizi*2 
       [1.9,3, &quot;ruby&quot;,1.9,3,&quot;ruby&quot;]

      
       Basit Kod Örnekleri 7 – Diziler 2 
      
     
      
       Ruby'de dizileri to_s metoduyla dizgeye, dizgeleri de to_a metoduyla diziye dönüştürebiliriz; 
       
       dizi = [“12”,21,”ruby”] 
       dizi.to_s 
       &quot;1221ruby&quot; 
       
       alternatif;  join 
       dizge= dizi.join(“:”) 
       “ 12:21:ruby” 
       
       dizge.to_a 
       [&quot;12:21:ruby&quot;] 
       
       alternatif;  split 
       dizge.split(&quot;:&quot;) 
       [&quot;12&quot;, &quot;21&quot;, &quot;ruby&quot;]

      
       Basit Kod Örnekleri 8 – Denetim Yapıları 1 
      
     
      
       case ; 
       
       
      
     
      
       
      
     
      
       i=8 
       case i 
       when 1,2..5 
       print “1..5” 
       when 6..10 
       print “6..10” 
       end 
       
      
     
      
       Çıktı ;  6..10 
      
     
      
       case 'abcdef' 
       when 'aaa', 'bbb' 
       print &quot;aaa or bbb&quot; 
       when /def/ 
       print &quot;/def/ icerir&quot; 
       end 
       
      
     
      
       Çıktı ; 
       /def/ icerir

      
       Basit Kod Örnekleri 9 – Denetim Yapıları 2 
      
     
      
       
      
     
      
       while; 
      
     
      
       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 
      
     
      
       for; 
      
     
      
       for i in [200,-3.6,&quot;ruby&quot;] 
       print &quot;#{i}(#{i.type})&quot; 
       end 
      
     
      
       Çıktı;  
       200  (Fixnum) 
       -3.6  (Float) 
       ruby  (String) 
       
      
     
      
       
      
     
      
       
      
     
      
       each? for? 
      
     
      
       
      
     
      
       dizi =[200,-3.6,&quot;ruby&quot;] 
       dizi.each do |i| 
       print i 
       end 
      
     
      
       Çıktı; 
       200-3.6ruby

      
       Basit Kod Örnekleri 10 – Sınıflar/Miras 
      
     
      
       class Memeli 
       def nefes 
       print &quot;Nefes al, Nefes ver&quot; 
       end 
       end 
      
     
      
       Basit bir sınıf tanımı; 
      
     
      
       class Kedi<Memeli 
       def konus 
       print &quot;Miyav&quot; 
       end 
       end 
      
     
      
       Miras; 
      
     
      
       pisi = Kedi.new 
       
       pisi.nefes 
       Nefes al, Nefes ver 
       
       pisi.konus 
       Miyav

      
       Basit Kod Örnekleri 10 – Miras 2 
      
     
      
       Süper sınıf, alt sınıf..? 
      
     
      
       class Kus 
       def gagala 
       print &quot;Tüylerimi temizliyorum.&quot; 
       end 
       def uc 
       print &quot;Uçuyorum.&quot; 
       end 
       end 
       
       
      
     
      
       class Penguen<Kus 
       def uc 
       fail &quot;Üzgünüm, yüzmeyi tercih ederim.&quot; 
       end 
       end 
      
     
      
       
      
     
      
       tux= Penguen.new 
       
       tux.uc 
       
       RuntimeError: Üzgünüm, yüzmeyi tercih ederim.

      
       Modüller; 
       Modülün örneği, altsınıfı yoktur, 
       module ... end şeklinde tanımlanır, 
       
      
     
      
       Basit Kod Örnekleri 10 – Modüller/Mixin 
      
     
      
       module Trig 
       PI = 3.141592654 
       def Trig.sin(x) 
       # .. 
       end 
       def Trig.cos(x) 
       # .. 
       end 
       end 
       
      
     
      
       Mix-in; 
      
     
      
       class Geo 
       include Trig 
       # .... 
       end

      
       İnteraktif Ruby - 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> &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;]

      
       Kaynaklar 
       
      
     
      
       Ruby Kullanıcı Kılavuzu 
       
       http://docs.comu.edu.tr/howto/ruby-ug.html 
       
       Programming Ruby  
       
       http://www.ruby-doc.org/docs/ProgrammingRuby/ 
       
       Ruby Ana Sayfası 
       
       http://www.ruby-lang.org/en/ 
       
       Matz'ın Seminerleri 
       
       http://www.rubyist.net/~matz/slides/ 
       
       Ruby Garden 
       
       http://www.rubygarden.com/ruby?RealWorldRuby 
       
       Programlama Dili Kıyaslamaları 
       
       http://www.jvoegele.com/software/langcomp.html 
       
       Ruby FAQ 
       
       http://dev.rubycentral.com/faq/rubyfaq.html

Más contenido relacionado

La actualidad más candente

自律的なチームを作る
自律的なチームを作る自律的なチームを作る
自律的なチームを作るYuki Kanaya
 
resume-theorique-m205-v2-0-6315ee954ea50 (5).pdf
resume-theorique-m205-v2-0-6315ee954ea50 (5).pdfresume-theorique-m205-v2-0-6315ee954ea50 (5).pdf
resume-theorique-m205-v2-0-6315ee954ea50 (5).pdfFootballLovers9
 
Enterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQEnterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQelliando dias
 
Akamai Intelligent Platform ご紹介
Akamai Intelligent Platform ご紹介Akamai Intelligent Platform ご紹介
Akamai Intelligent Platform ご紹介YuanChang21
 
Introduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQIntroduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQDmitriy Samovskiy
 
Urheilijan nillkkavammat ja Labrum-repeämät
Urheilijan nillkkavammat ja Labrum-repeämätUrheilijan nillkkavammat ja Labrum-repeämät
Urheilijan nillkkavammat ja Labrum-repeämätMehiläinen NEO
 

La actualidad más candente (7)

自律的なチームを作る
自律的なチームを作る自律的なチームを作る
自律的なチームを作る
 
IBM MQ vs Apache ActiveMQ
IBM MQ vs Apache ActiveMQIBM MQ vs Apache ActiveMQ
IBM MQ vs Apache ActiveMQ
 
resume-theorique-m205-v2-0-6315ee954ea50 (5).pdf
resume-theorique-m205-v2-0-6315ee954ea50 (5).pdfresume-theorique-m205-v2-0-6315ee954ea50 (5).pdf
resume-theorique-m205-v2-0-6315ee954ea50 (5).pdf
 
Enterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQEnterprise Messaging with Apache ActiveMQ
Enterprise Messaging with Apache ActiveMQ
 
Akamai Intelligent Platform ご紹介
Akamai Intelligent Platform ご紹介Akamai Intelligent Platform ご紹介
Akamai Intelligent Platform ご紹介
 
Introduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQIntroduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQ
 
Urheilijan nillkkavammat ja Labrum-repeämät
Urheilijan nillkkavammat ja Labrum-repeämätUrheilijan nillkkavammat ja Labrum-repeämät
Urheilijan nillkkavammat ja Labrum-repeämät
 

Destacado

Internet Tabanli EğItim
Internet Tabanli EğItimInternet Tabanli EğItim
Internet Tabanli EğItimselver
 
Python Programlama Dili Eğitimi
Python Programlama Dili EğitimiPython Programlama Dili Eğitimi
Python Programlama Dili EğitimiEnes Ateş
 
Yapay Zeka, Deep Learning and Machine Learning
Yapay Zeka, Deep Learning and Machine LearningYapay Zeka, Deep Learning and Machine Learning
Yapay Zeka, Deep Learning and Machine LearningAlper Nebi Kanlı
 
YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...
YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...
YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...SELENGCN
 
Hping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıHping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıBGA Cyber Security
 
Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)BGA Cyber Security
 
Man in the Middle Atack (Ortadaki Adam Saldırısı)
Man in the Middle Atack (Ortadaki Adam Saldırısı)Man in the Middle Atack (Ortadaki Adam Saldırısı)
Man in the Middle Atack (Ortadaki Adam Saldırısı)Ahmet Gürel
 
BGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması ÇözümleriBGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması ÇözümleriBGA Cyber Security
 
Liselere Yazılım ve Siber Güvenlik Farkındalığı Sunumu
Liselere Yazılım ve Siber Güvenlik Farkındalığı SunumuLiselere Yazılım ve Siber Güvenlik Farkındalığı Sunumu
Liselere Yazılım ve Siber Güvenlik Farkındalığı SunumuAhmet Gürel
 
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri AnaliziHadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri AnaliziSerkan Sakınmaz
 
İki boyutlu süzgeçler ve Konvolüsyon
İki boyutlu süzgeçler ve Konvolüsyonİki boyutlu süzgeçler ve Konvolüsyon
İki boyutlu süzgeçler ve KonvolüsyonŞarlatan Avcısı
 
Görüntü işleme
Görüntü işlemeGörüntü işleme
Görüntü işlemeErol Dizdar
 
Ruby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama DiliRuby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama DiliSerdar Dogruyol
 
10-Kablosuz Ağlardaki Zaafiyetler
10-Kablosuz Ağlardaki Zaafiyetler10-Kablosuz Ağlardaki Zaafiyetler
10-Kablosuz Ağlardaki ZaafiyetlerÖnay Kıvılcım
 
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – TsharkTCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – TsharkBGA Cyber Security
 
Biyometrik Tanıma Sistemleri
Biyometrik Tanıma SistemleriBiyometrik Tanıma Sistemleri
Biyometrik Tanıma SistemleriBetül Becit
 
Python Image Kütüphanesi
Python Image KütüphanesiPython Image Kütüphanesi
Python Image KütüphanesiCaglar Dursun
 

Destacado (20)

Internet Tabanli EğItim
Internet Tabanli EğItimInternet Tabanli EğItim
Internet Tabanli EğItim
 
Python Programlama Dili Eğitimi
Python Programlama Dili EğitimiPython Programlama Dili Eğitimi
Python Programlama Dili Eğitimi
 
Yapay Zeka, Deep Learning and Machine Learning
Yapay Zeka, Deep Learning and Machine LearningYapay Zeka, Deep Learning and Machine Learning
Yapay Zeka, Deep Learning and Machine Learning
 
YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...
YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...
YAPAY ZEKÂ VE DUYGUSAL ZEKÂ KULLANIM FARKLILIKLARININ İNCELENMESİ: TEKNOLOJİK...
 
Hping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif ÇalışmalarıHping Kullanarak Ağ Keşif Çalışmaları
Hping Kullanarak Ağ Keşif Çalışmaları
 
Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)
 
Man in the Middle Atack (Ortadaki Adam Saldırısı)
Man in the Middle Atack (Ortadaki Adam Saldırısı)Man in the Middle Atack (Ortadaki Adam Saldırısı)
Man in the Middle Atack (Ortadaki Adam Saldırısı)
 
BGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması ÇözümleriBGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması Çözümleri
 
Liselere Yazılım ve Siber Güvenlik Farkındalığı Sunumu
Liselere Yazılım ve Siber Güvenlik Farkındalığı SunumuLiselere Yazılım ve Siber Güvenlik Farkındalığı Sunumu
Liselere Yazılım ve Siber Güvenlik Farkındalığı Sunumu
 
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri AnaliziHadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
 
İki boyutlu süzgeçler ve Konvolüsyon
İki boyutlu süzgeçler ve Konvolüsyonİki boyutlu süzgeçler ve Konvolüsyon
İki boyutlu süzgeçler ve Konvolüsyon
 
Görüntü işleme
Görüntü işlemeGörüntü işleme
Görüntü işleme
 
Ruby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama DiliRuby - Dünyanın En Güzel Programlama Dili
Ruby - Dünyanın En Güzel Programlama Dili
 
Holynix v1
Holynix v1Holynix v1
Holynix v1
 
Yapay Sinir Ağları
Yapay Sinir AğlarıYapay Sinir Ağları
Yapay Sinir Ağları
 
10-Kablosuz Ağlardaki Zaafiyetler
10-Kablosuz Ağlardaki Zaafiyetler10-Kablosuz Ağlardaki Zaafiyetler
10-Kablosuz Ağlardaki Zaafiyetler
 
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – TsharkTCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
 
Biyometrik Tanıma Sistemleri
Biyometrik Tanıma SistemleriBiyometrik Tanıma Sistemleri
Biyometrik Tanıma Sistemleri
 
Pasif Bilgi Toplama
Pasif Bilgi ToplamaPasif Bilgi Toplama
Pasif Bilgi Toplama
 
Python Image Kütüphanesi
Python Image KütüphanesiPython Image Kütüphanesi
Python Image Kütüphanesi
 

Más de pinguar

Pardus ve Yenilikleri
Pardus ve YenilikleriPardus ve Yenilikleri
Pardus ve Yenilikleripinguar
 
Ruby ve GTK Kullanarak Arayuz Tasarlamak
Ruby ve GTK Kullanarak Arayuz TasarlamakRuby ve GTK Kullanarak Arayuz Tasarlamak
Ruby ve GTK Kullanarak Arayuz Tasarlamakpinguar
 
Ruby Programlama Dili'nin Temelleri
Ruby Programlama Dili'nin TemelleriRuby Programlama Dili'nin Temelleri
Ruby Programlama Dili'nin Temelleripinguar
 
Kadinlar ve Linux
Kadinlar ve LinuxKadinlar ve Linux
Kadinlar ve Linuxpinguar
 
Ozgur Yazilimm Belgelerinin Yerellestirme Sureci
Ozgur Yazilimm Belgelerinin Yerellestirme SureciOzgur Yazilimm Belgelerinin Yerellestirme Sureci
Ozgur Yazilimm Belgelerinin Yerellestirme Surecipinguar
 
Internet'in Sosyolojik Boyutu
Internet'in Sosyolojik BoyutuInternet'in Sosyolojik Boyutu
Internet'in Sosyolojik Boyutupinguar
 

Más de pinguar (6)

Pardus ve Yenilikleri
Pardus ve YenilikleriPardus ve Yenilikleri
Pardus ve Yenilikleri
 
Ruby ve GTK Kullanarak Arayuz Tasarlamak
Ruby ve GTK Kullanarak Arayuz TasarlamakRuby ve GTK Kullanarak Arayuz Tasarlamak
Ruby ve GTK Kullanarak Arayuz Tasarlamak
 
Ruby Programlama Dili'nin Temelleri
Ruby Programlama Dili'nin TemelleriRuby Programlama Dili'nin Temelleri
Ruby Programlama Dili'nin Temelleri
 
Kadinlar ve Linux
Kadinlar ve LinuxKadinlar ve Linux
Kadinlar ve Linux
 
Ozgur Yazilimm Belgelerinin Yerellestirme Sureci
Ozgur Yazilimm Belgelerinin Yerellestirme SureciOzgur Yazilimm Belgelerinin Yerellestirme Sureci
Ozgur Yazilimm Belgelerinin Yerellestirme Sureci
 
Internet'in Sosyolojik Boyutu
Internet'in Sosyolojik BoyutuInternet'in Sosyolojik Boyutu
Internet'in Sosyolojik Boyutu
 

Ruby Programlama Dili

  • 1. Ruby Programlama Dili Pınar Yanardağ [email_address]
  • 2. İçerik Ruby'nin Tarihçesi Temel Felsefesi Genel Özellikleri Kullanım Alanları Diğer Dillerle Karşılaştırmalar Basit Kod Örnekleri
  • 3. Ruby'nin Kısa Tarihçesi Yukihiro Matsumoto (a.k.a Matz ) tarafından yaratıldı. 24 Şubat 1993 yılında geliştirilmeye başlandı. Aralık 1995'de, Ruby 0.95 sürümü Japon haber listelerine duyuruldu. Son kararlı sürümü, 1.8.4 (Aralık 2005)
  • 4. Matz, Ruby'yi Niçin Yarattı? 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. Üniversite yıllarındaki en büyük hayali, kendi programlama dilini tasarlamaktı.
  • 5. Ruby Adı, Nereden Geliyor? Ruby dilinin tasarım amaçları arasında, Perl'den daha güçlü bir dil olması yatıyor. Perl (pearl), Haziran ayını simgeleyen bir burç taşı. Ruby ise, Temmuz ayını simgeliyor. İyi bir isim, dizaynın %80'inin bitmiş olduğu anlamına geliyor. İyi bir isim, motivasyonu sağlıyor, ve çalışmaya teşvik ediyor. Programlama dillerinde, en önemli şey isimdir. İyi bir isme sahip olmayan bir programlama dili, başarıya ulaşamaz. Geçenlerde çok iyi bir isim buldum ve şimdi uygun bir dil arıyorum. Donald Knuth
  • 6. Ruby'nin Temel Felsefesi - 1 İyi Arayüz Prensibi; Programlama dilleri, arayüz olarak kabul edilebilir. İyi arayüzün özellikleri; - Uyumluluk, - Esneklik, - Özlülük Özlülük Prensibi; ( we are the masters they're the slaves ) Ruby'nin ana felsefesine göre, programcı makinaya odaklanmak yerine, programlamanın nasıl yapıldığına odaklanmalıdır.
  • 7. Ruby'nin Temel Felsefesi - 2 Mükemmel Programlama Dili Yoktur; Programlama dillerine iki tür bakış vardır, - Programlama dili ile neler yapabileceğiniz, - Programlama yaparken kendinizi nasıl hissettiğiniz. Özgürlük ve Rahatlık; Birşeyi yapmanın birden çok yolu vardır. Ruby, size seçme özgürlüğü verir.
  • 8. Ruby'nin Temel Felsefesi - 3 Ruby'den Haz Almak; Programlama dilinin sihirli kurallarına dikkat etmek yerine, çözeceğiniz probleme odaklanın. Eğer, yazdığınız pseudo kodlar bilgisayarınızda direkt çalışırsa, ne hissederdiniz? En Az Sürpriz Prensibi (Principle of Matz's Least Suprise); Ruby'nin amacı, programlamada harcanan eforu en aza indirmektir. Belirsiz durumlarla karşılaştığınızda, çözüm sizi sürprize uğratmayacak olanıdır.
  • 9. Ruby'nin Genel Özellikleri - 1 Nesneye yönelik ; - Ruby, yüzde yüz saf nesneye yönelik bir dildir (Smalltalk gibi, bu konuda hiçbir istisna kabul etmez). - Yönlendirdiğiniz herşey ve bunların döndürdüğü sonuçlar birer nesnedir, - Metotlar, nesneye bir mesaj yollayarak uyandırılırlar, - number = Math.abs(number) // Java - number = number.abs // Ruby 1 + 2 + ( 2 argümanı ile birlikte) , 1 nesnesine mesaj gönderiliyor.
  • 10. Özel Nesneye Yönelik Özellikler; - Ruby tekil mirası destekler, ancak çoklu miras gerçekleştirimini şık bir yolla sağlar, - Mix-in tekniği, - Tekil metotlar ... Ruby'nin Genel Özellikleri - 2
  • 11. Ruby'nin Genel Özellikleri - 3 Betikleme Dili;, Ruby'nin Betikleme Özellikleri; - Çoğu betikleme dili gibi, yorumlayıcı sayesinde , edit- run- edit tekniğiyle hızlı geliştirme olanağı sağlar. Derlemeye ihtiyaç duymaz. - Daha az kod yazmanız gerektiği için, hızlı programlama yaparsınız.
  • 12. Betikleme Mi! - Betik dilleri; sıradüzensel interaktif komutlar bütününden, tam anlamıyla donatılmış programlama dillerine dönüştü. - Yakın bir zamana kadar, kimse betik dilleriyle gerçek uygulamalar yazmayı düşünmüyordu. - Ancak bugün betikleme dilleri, çeşitli işlere hizmet ediyorlar; - Kişisel yönetici araçları, - Web uygulama framework'leri, - Gerçek dünya uygulamaları, - Devasa verilerin analizleri ... Ruby'nin Genel Özellikleri - 4
  • 13. Ruby'nin Genel Özellikleri - 5 Yorumlanan (interpreted) Bir Dil; Avantaj, ya da Dezavantaj? - Betik dilleri için hızlı geliştirme, - Kodlar tek başına çalıştırılabilir uygulama haline dönüştürülemez. - Performans düşüklüğü/yavaşlık ...?
  • 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. Eğer birçoklarından daha ileriyi görebilmişsem, bu devlerin omuzlarında durup ileriye bakmamdan ötürüdür olmuştur. Isaac Newton Ruby'nin Genel Özellikleri - 6
  • 15. Ruby'nin Genel Özellikleri - 7 Dinamik Tanımlama; - Değişken bildirimleri gereksiz; - Değişkenlerin yaşam sınırları basit kurallarla belirleniyor; - “degisken” = yerel değişken - “@degisken”' = örnek değişken - “$degisken” = global değişken - Değişkenlerin türü yoktur.
  • 16. Söz dizimi basit ve tutarlı; moon@debian:~$ irb irb(main):001:0> dizi = [1.5, &quot;Ruby&quot;, 6] => [1.5, &quot;Ruby&quot;, 6] irb(main):002:0> dizi[1] => &quot;Ruby&quot; irb(main):003:0> dizi[-1] => 6 irb(main):004:0> dizi << &quot;Rails&quot; => [1.5, &quot;Ruby&quot;, 6, &quot;Rails&quot;] irb(main):005:0> dizi2 = dizi [1,2] => [&quot;Ruby&quot;, 6] irb(main):006:0> dizi2 => [&quot;Ruby&quot;, 6] Ruby'nin Genel Özellikleri - 8
  • 17. Ruby'nin Genel Özellikleri- 9 Kolay ve Hızlı; - Güçlü metin işleme ve düzenli ifadelere sahiptir, - Bellek yönetimi otomatiktir, - Hata yakalama mekanizmaları bulunur, - Otomatik çöp toplayıcısına sahiptir.
  • 18. 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. Ruby'nin Genel Özellikleri- 10 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 ...
  • 19. Ruby, Hangi Uygulamalar İç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 ...
  • 20. Yüksek trafikli web uygulamalarında, İşletim sistemi gerçekleştirimlerinde, Derleyici gerçekleştirimlerinde ... Ruby, Hangi Uygulamalar İçin Uygun Değil?
  • 21. Karşılaştırmalar: Ruby vs. Java -1 Typing; Ruby; dinamik yazımlı, Java; statik yazımlı Miras; Ruby; mix-in, Java; tekli miras (interface -> mix-in) Aktif nesne; Ruby; self, Java; this
  • 22. İşleyiş; Ruby; Yorumlanan, Java; Bytecode Saflık ; Ruby; Her şey birer nesne, Yapılan her işlem, nesneye mesaj olarak geçiyor, Java; Nesne olmayan kısımlar var Karşılaştırmalar: Ruby vs. Java -2 Java'nın sanal makinası daha hızlı.
  • 23. Karşılaştırmalar: Ruby vs. Perl -1 Saflık; Ruby; Herşey bir nesne, Perl; Nesne olmayan şeyler var Miras; Ruby, Mix-in, Perl, Çoklu miras
  • 24. Karşılaştırmalar: Ruby vs. Perl -2 Ruby, Perl'e göre öğrenmesi ve kullanması daha kolay bir dil, ve daha basit söz dizimine sahip, Ruby'de $@% kodları, veri tipleri için değil, değişkenlerin yaşam alanını belirlemek için kullanılır. Perl, Ruby'ye göre daha hızlı, ve Unicode desteğine sahip.
  • 25. Karşılaştırmalar: Ruby vs. Python -1 Saflık; Ruby, Tüm işlemler nesneye mesaj olarak geçer, Python, Metotların haricinde, fonksiyonlar yazmak da mümkündür. -3.abs abs(-3) Miras; Ruby, Mix-in, Python, Çoklu miras
  • 26. def + (x) x+5 end Karşılaştırmalar: Ruby vs. Python -2 Ruby, daha doğal bir operator overloading'e sahiptir, Ruby, çoğu zaman Python'dan daha hızlı,
  • 27. 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 :)
  • 28. Niçin Ruby Değil? Performans; 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, Unicode desteği tümleşik değil, Deneyim , İyi bilinen bir dil değil; belgelendirme çok az, Çok az, deneyimli coder...
  • 29. Ruby Nerelerde Kullanılıyor? -1 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ü,
  • 30. 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
  • 31. Basit Kod Örnekleri 1- Başlangıç puts “Merhaba Dünya!” Merhaba Dünya! print “Merhaba Dünya!” Merhaba Dünya! print “Merhaba”+”Dünya!”+”” Merhaba Dünya! print “Merhaba”, “Dünya!”,”” Merhaba Dünya!
  • 32. Basit Kod Örnekleri 2 – Dizgeler 1 Tek, çift tırnak? ifade= &quot;1 2 3 4 5 #{2*3} 7 8 9 10&quot; &quot;1 2 3 4 5 6 7 8 9 10&quot; ifade= '1 2 3 4 5 #{2*3} 7 8 9 10' &quot;1 2 3 4 5 {2*3} 7 8 9 10&quot; Birleştirme işlemi; sozcuk = &quot; ozgur &quot;+&quot; yazilim &quot; &quot; ozgur yazilim &quot; Tekrarlatma işlemi; sozcuk= sozcuk*2 &quot; ozgur yazilim ozgur yazilim &quot;
  • 33. Basit Kod Örnekleri 3 – Dizgeler 2 Karakter seçimi; kelime=”ruby” kelime[0] 114 # r harfinin ASCII kodu kelime[-1] 121 # y harfinin ASCII kodu Eşitlik kontrolü; kelime= “ruby” &quot;ruby&quot; == &quot;ruby&quot; true &quot;ruby&quot; == &quot;perl&quot; false
  • 34. Altdizge seçimi; kelime=”ruby” kelime[0..2] “ rub” kelime[0,1] “ r” kelime[-2,2] “ by” Basit Kod Örnekleri 4 – Dizgeler 3
  • 35. 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 Basit Kod Örnekleri 5 – 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, def hex(s) (s =~ /<0(x|X)(|[a-f]|[A-F])+>/) != nil end < > işaretleri arasında, onaltılık sayı olup olmadığını kontrol edeceğiz
  • 36. Basit Kod Örnekleri 6 – Diziler 1 Ruby'de dizilere farklı türden nesneler atayabilirsiniz, dizi=[1.9,3,&quot;ruby&quot;] [1.9,3, &quot;ruby&quot;] Dizileri de , aynı dizgeler gibi birleştirebilir, ya da tekrar ettirebilirsiniz, dizi + [“programlama”, “dili”] [1.9,3, &quot;ruby&quot;,&quot;programlama&quot;, &quot;dili&quot;] dizi*2 [1.9,3, &quot;ruby&quot;,1.9,3,&quot;ruby&quot;]
  • 37. Basit Kod Örnekleri 7 – Diziler 2 Ruby'de dizileri to_s metoduyla dizgeye, dizgeleri de to_a metoduyla diziye dönüştürebiliriz; dizi = [“12”,21,”ruby”] dizi.to_s &quot;1221ruby&quot; alternatif; join dizge= dizi.join(“:”) “ 12:21:ruby” dizge.to_a [&quot;12:21:ruby&quot;] alternatif; split dizge.split(&quot;:&quot;) [&quot;12&quot;, &quot;21&quot;, &quot;ruby&quot;]
  • 38. Basit Kod Örnekleri 8 – Denetim Yapıları 1 case ; i=8 case i when 1,2..5 print “1..5” when 6..10 print “6..10” end Çıktı ; 6..10 case 'abcdef' when 'aaa', 'bbb' print &quot;aaa or bbb&quot; when /def/ print &quot;/def/ icerir&quot; end Çıktı ; /def/ icerir
  • 39. Basit Kod Örnekleri 9 – Denetim Yapıları 2 while; 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 for; for i in [200,-3.6,&quot;ruby&quot;] print &quot;#{i}(#{i.type})&quot; end Çıktı; 200 (Fixnum) -3.6 (Float) ruby (String) each? for? dizi =[200,-3.6,&quot;ruby&quot;] dizi.each do |i| print i end Çıktı; 200-3.6ruby
  • 40. Basit Kod Örnekleri 10 – Sınıflar/Miras class Memeli def nefes print &quot;Nefes al, Nefes ver&quot; end end Basit bir sınıf tanımı; class Kedi<Memeli def konus print &quot;Miyav&quot; end end Miras; pisi = Kedi.new pisi.nefes Nefes al, Nefes ver pisi.konus Miyav
  • 41. Basit Kod Örnekleri 10 – Miras 2 Süper sınıf, alt sınıf..? class Kus def gagala print &quot;Tüylerimi temizliyorum.&quot; end def uc print &quot;Uçuyorum.&quot; end end class Penguen<Kus def uc fail &quot;Üzgünüm, yüzmeyi tercih ederim.&quot; end end tux= Penguen.new tux.uc RuntimeError: Üzgünüm, yüzmeyi tercih ederim.
  • 42. Modüller; Modülün örneği, altsınıfı yoktur, module ... end şeklinde tanımlanır, Basit Kod Örnekleri 10 – Modüller/Mixin module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end Mix-in; class Geo include Trig # .... end
  • 43. İnteraktif Ruby - 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> &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;]
  • 44. Kaynaklar Ruby Kullanıcı Kılavuzu http://docs.comu.edu.tr/howto/ruby-ug.html Programming Ruby http://www.ruby-doc.org/docs/ProgrammingRuby/ Ruby Ana Sayfası http://www.ruby-lang.org/en/ Matz'ın Seminerleri http://www.rubyist.net/~matz/slides/ Ruby Garden http://www.rubygarden.com/ruby?RealWorldRuby Programlama Dili Kıyaslamaları http://www.jvoegele.com/software/langcomp.html Ruby FAQ http://dev.rubycentral.com/faq/rubyfaq.html