NotesWhat is notes.io?

Notes brand slogan

Notes - notes.io

Ruby Hakkında
Ruby’nin niçin bu kadar popüler olduğunu mu merak ediyorsunuz? Rubyseverler, Ruby’yi güzel, sanatsal, becerikli ve pratik bir dil olarak tanımlarlar. Peki Ruby size neler vaad ediyor?

Ruby’nin Yaratıcısının İdealleri
Ruby dengenin dilidir. Ruby’nin yaratıcısı Yukihiro “Matz” Matsumoto en sevdiği dillerin (Perl, Smalltalk, Eiffel, Ada, ve Lisp) en iyi özelliklerini harmanlayarak fonksiyonel programlama ile imperativ programlamaya dayanan yeni bir dil yaratmayı amaçlamıştır.

Matz, her zaman “Ruby’yi basit değil, doğal yapmaya çalıştığını” vurgulamıştır, tıpkı yaşam gibi…

Buradan yola çıkarak Matz aşağıdakileri ekler:

Ruby tıpkı insan vücudu gibi, görünüşte basit, ama içinde çok kompleks bir yapıya sahiptir1.

Ruby’nin Büyüme Hızı
Ruby 1995’te halka duyurulduğundan beri, dünya çapında programcıların dikkatini çekmeye başlamıştır. 2006 Ruby’nin altın yılı olmuştur. Dünyanın en büyük şehirlerinde aktif kullanıcı grupları ve Ruby ile ilgili konferanslar gerçekleştirilmiştir.

Ruby-Talk, Ruby dilini tartışmak için birincil e-posta listesi, 2006 yılında günde ortalama 200 mesaja ulaşmıştır. Bu sayı son yıllarda düşmüştür çünkü topluluğun büyüklüğü, tartışmanın merkezi bir listeden daha küçük gruplara kaymasına neden olmuştur.

Ruby, dünya çapında programlama dillerinin büyümesini ve popülaritesini ölçen dizinlerin (TIOBE dizini gibi) çoğunda ilk 10 içinde yer almıştır. Büyümenin çoğu, Ruby ile yazılmış yazılımların popülaritesiyle ilgilidir, özellikle Ruby on Rails web çatısıyla.

Ruby aynı zamanda tamamen özgür bir dildir. Bu özgürlük sadece maddi anlamda değildir; kullanma, kopyalama, değiştirme, ve dağıtma konusunda da özgürsünüz.

Her şeyi bir Nesne Olarak Görmek
Matz yeni bir dil yaratmadan önce ideal sözdizimini bulmak için diğer programlama dillerini incelemiş ve araştırmasının sonunda “Perl’den daha güçlü ama Python’dan daha nesneye yönelik bir betik dili istediğini2” söylemiştir.

Ruby’de herşey bir nesnedir. Gördüğünüz en ufak bilgi parçası ve kod kendi özelliklerine ve olaylarına sahiptir. Nesne yönelimli programlama, özellikleri örnek değişkenleri ismiyle anar, olaylar ise metodlar olarak bilinir. Ruby’nin yüzde yüz saf nesneye yönelik bir dil olduğunun en iyi ispatı bir kod parçası ile bir sayıya olay vererek yapılır:

5.times { print "We *love* Ruby -- it's outrageous!" }
Çoğu dilde sayılar ve diğer ilkel tipler nesne değildir. Ruby tüm tiplerine metod ve örnek değişkenleri verme geleneğini Smalltalk’tan miras almıştır. Bu, Ruby kullanımını kolaylaştırır, çünkü nesnelere uygulanan kurallar Ruby’nin tümüne uygulanır.

Ruby’nin Esnekliği
Ruby, kullanıcılara istediği kısımları değiştirebilme imkanı sunduğu için esnek bir dil olarak görülür. İsteğe bağlı olarak Ruby’nin esas kısımları bile kaldırılabilir, yeniden tanımlanabilir ya da bunlara yeni kısımlar eklenebilir. Ruby, programcıyı kısıtlamamayı amaçlar.

Örneğin toplama işleminin artı (+) operatörü ile yapıldığını biliyoruz. Ama eğer okunabilirlik amacıyla plus gibi bir kelime kullanmak istiyorsanız Ruby’nin gömülü Numeric sınıfına yeni bir metod ekleyebilirsiniz.

class Numeric
def plus(x)
self.+(x)
end
end

y = 5.plus 6
# y'nin değeri 11 oldu.
Ruby’nin operatörleri metodlar için sözdizimsel kolaylıklardır. Bunları da yeniden tanımlayabilirsiniz.

Bloklar, Tam Anlamıyla Etkileyici bir Özellik
Ruby’nin esnek bir dil olarak anılmasının en önemli sebeplerinden biri de bloklardır. Bir kapamayı (closure) herhangi bir metoda ataçlayabilir ve metodun nasıl tepki vereceğini belirleyebilirsiniz. Kapamalar, bloklar olarak adlandırılırlar ve PHP ya da Visual Basic gibi imperativ dillerden Ruby’ye geçenler arasında en popüler özelliğe dönüşmüştür.

Bloklar fonksiyonel dillerden esinlenilerek Ruby’ye getirilmiştir. Matz “Ruby kapamalarında, Lisp kültürüne saygı göstermek istedim3.” demiştir.

search_engines =
%w[Google Yahoo MSN].map do |engine|
"http://www." + engine.downcase + ".com"
end
Yukarıdaki kodda bir blok do ... end yapıları içerisinde tanımlanıyor. map metodu, bloğu sağlanan kelime listesine uygular. Ruby’de bunun gibi bir çok metod programcıya kendi bloklarını yazıp, bu metodun ne yapması gerektiğini belirtme izni vermektedir.

Ruby ve Mixin’ler
Pek çok nesneye yönelik dilin aksine, Ruby özellikle yalnızca tekil mirası destekler. Çünkü Ruby modül konseptini (Objective-C’de Kategoriler) kullanır. Modüller metodların bir koleksiyonundan ibarettir.

Sınıflar bir modülü kendisine dahil ederse, onun tüm metodlarını da almış olur. Örneğin each metodunu gerçekleştiren her sınıf Enumerable modülünü de kendisine dahil edebilir, böylece döngülerde each‘i kullanan bir dizi metoda sahip olur.

class MyArray
include Enumerable
end
Genelde Ruby’ciler bu yolu bazen çok karmaşıklaşan ve kısıtlayıcı olan çoklu mirastan daha temiz bir yöntem olarak görürler.

Ruby’nin Görselliği
Her ne kadar Ruby sınırlı sayıda noktalama işareti ve İngilizce anahtar kelimeler kullansa da, bazı noktalama işaretleri Ruby’yi dekore etmek için kullanılır. Ruby’de değişken tanımlamaları yoktur. Değişkenlerin faaliyet alanlarını belirlemek için basit isimlendirme gelenekleri kullanılır.

var yerel bir değişken olabilir
@var bir örnek değişkenidir.
$var bir evrensel değişkendir.
Bu işaretlendirmeler sayesinde programcı her değişkenin rolünü kolayca görebilmektedir. Aynı zamanda her örnek değişken için self. kullanma külfetini ortadan kaldırmıştır.

Temel İşlevlerin Ötesinde
Ruby çok çeşitli özelliklere sahiptir, aşağıda bir kaçından bahsedilmiştir:

Ruby, hataları işlemeyi kolaylaştırmak amacıyla Java veya Python gibi istisna işleme özelliklerine sahiptir.

Ruby tüm nesneleri için gerçek bir mark&sweep çöp toplayıcısı sunar. Eklenti kütüphanelerinde referans sayaçlarına gerek yok, Matz’ın dediği gibi: “Bu sizin sağlığınız için iyidir.”

C’den Ruby çağıran şık API’ı sayesinde Ruby’de C eklentileri yazmak Perl ya da Python’kinden daha kolaydır. Bu API aynı zamanda yazılımlara betik dili olarak Ruby’yi gömmek için gereken çağrıları da içerir. Ayrıca SWIG arayüzü de alternatif olarak sunulmaktadır.

İşletim sistemi izin verdiği sürece harici dinamik kütüphaneler yükleyebilirsiniz.

Ruby işletim sisteminden bağımsız iş parçacığı özelliği sunar.Yani işletim sisteminin desteklemesine bakmaksızın, MS-DOS üzerinde olsanız bile çoklu iş parçacıkları kullanabilirsiniz!

Ruby yüksek taşınabilirliğe sahiptir. GNU/Linux üzerinde geliştirilmiş olsa dahi, UNIX’in bir çok çeşidi, macOS, Windows, DOS, BeOS, OS/2, vb. üzerinde çalışmaktadır.

Ruby’nin Diğer Gerçeklemeleri
Ruby, bir dil olarak, birkaç farklı gerçeklemeye sahiptir. Bu sayfa, toplulukta sıklıkla MRI (“Matz’s Ruby Interpreter”) ya da CRuby (C’de yazıldığından dolayı) olarak bilinen başvuru gerçeklemesini tartışmaktadır, ancak başkaları da vardır. Bunlar belirli durumlarda kullanışlıdır, diğer dil ya da ortamlara fazladan bütünleşim sağlarlar, ya da MRI’ın sahip olmadığı özel özelliklere sahiptirler.

İşte bunların bir listesi:

JRuby, JVM’in (Java Virtual Machine) üstünde çalışan Ruby’dir, JVM’in eniyileyen JIT derleyicisi, çöp toplayıcısı, eşzamanlı thread’leri, araç ekosistemi, ve muazzam sayıdaki kütüphanelerinden faydalanır.
Rubinius, ‘Ruby’da yazılmış Ruby’dir’. LLVM’in üstüne inşa edilmiştir ve ayrıca diğer dillerin üstüne inşa edebilecekleri şık bir sanal makine de sunar.
TruffleRuby, GraalVM’in üstünde çalışan yüksek performanslı bir Ruby gerçeklemesidir.
mruby, bir uygulamaya bağlanıp gömülebilen hafif bir Ruby gerçeklemesidir. Geliştirilmesine Ruby’nin yaratıcısı Yukihiro “Matz” Matsumoto tarafından önderlik edilmektedir.
IronRuby, “.NET Web Çatısı’yla sıkı sıkıya bağlı” bir gerçeklemedir.
MagLev, “bütünleşik nesne sürekliliği ve dağıtılmış paylaşılan önbellekli hızlı, kararlı bir Ruby gerçeklemesidir”.
Cardinal, Parrot Sanal Makinesi için bir Ruby derleyicisidir” (Perl 6).


Ruby, nesneye yönelik, dinamik, reflektif ve esnek bir programlama dilidir. Ruby dili, Yukihiro Matsumoto tarafından Japonya'da tasarlanmaya ve geliştirilmeye başlanmıştır.

Sözdizimi olarak, Ada, Perl, Smalltalk, Lisp, Eiffel[3] gibi programlama dillerinden etkilenen Ruby; Python ile kimi ortak sözdizimi özelliklerine sahiptir. Fonksiyonel, nesneye yönelik, dinamik, reflektif gibi çoklu programlama paradigmalarını destekler.

Özgür bir yazılım olan Ruby; GPL ve Ruby lisansı[4] ile lisanslanmıştır.


Tarihçe
Ruby dilinin temelleri 1993 yılında atılmıştır. Bu dönemde nesneye dayalı bir betik dili arayışı içinde olan Japon yazılımcı Yukihiro "Matz" Matsumoto; Perl, Python gibi mevcut programlama dillerini araştırmasına rağmen aradığını bulamayınca yeni bir programlama dili tasarlamaya başladı. Şubat 1993'te Matz, bir arkadaşı ile yaptığı çevrim içi sohbet esnasında arkadaşının bu yeni dil için önerdiği Ruby ismini uygun buldu ve bu isimle dili geliştirmeye başladı.

Aralık 1995'te Ruby'nin 0.95 ile ilk genel sürümü yayınlandı. Aynı ay içerisinde peş peşe 3 sürüm daha yayınlandı. Bu sürümler Japonya'da yerel haber gruplarında duyuruldu.[5]

İlk genel sürümden tam bir yıl sonra, Aralık 1996'da Ruby 1.0 yayınlandı. Anavatanı Japonya'da hızla tanınan ve yayılan Ruby, 1999'da İngilizce yazıların yayınlanması ile tüm dünyaya açılma olanağına kavuştu.

2000 yılında Japonya'da Python'dan daha popüler bir dil haline gelen Ruby'nin İngilizce ile yazılan ilk kitabı , Programming Ruby adıyla aynı yılın Ekim ayında yayınlandı.[6]

Özellikler

Ubuntu'da Ruby programlama dili
Nesne tabanlı programlama (kalıtsallık, mixin ve metaclass desteği)
4 farklı tipte değişken tanımlanabilir: Global, class, instance ve local
Her şey bir ifade ve aynı zamanda obje
Hata ve istisna yönetimi
Garbage collection (tr. Çöp toplama)
Yüksek taşınabilirlik
Geniş standart kütüphane desteği (YAML, JSON, XML, CGI, OpenSSL, HTTP, FTP, RSS)
Perl benzeri dil seviyesinde doğal düzenli ifade desteği
Rasyonel sayılar, çok büyük sayılar ile çalışabilme
Bununla beraber Ruby içindeki UTF-8 desteği sınırlıdır.[kaynak belirtilmeli]

Sözdizimi ve yapısı
Ruby'nin sözdizimi günümüzde de yoğun olarak kullanılan Perl ve Python ile büyük benzerlikler gösterir. Sınıf ve metot tanımlamaları anahtar kelimelerle belirlenir. Ruby'de Perl'in aksine, değişken adlarının başında belirleyici karakterler ($, @@, % gibi) kullanmak bir zorunluluk değildir. Python'un tersine girintilerin dilin sözdiziminde bir etkisi yoktur.

Ruby, tek çoklu kalıtıma Java gibi izin vermemesine rağmen mixin adı verilen nesnelerle bir çeşit arayüz tanımlama imkânı verir. Ayrıca paketler üzerinden de bu sınırlama geçiştirilebilir.

Ruby'nin tasarımında dikkate alınan diller Ada, Eiffel, Lisp, Perl ve Smalltalk'dur. Dolayısıyla bir betik dili yapısına da sahiptir. Ruby, nesneye yöneliklilik açısından tamamen öyle olan Java ile Smalltalk arası olup yüzde yüz bu paradigmayı uygulamamaktadır.[7].
NEDEN RUBY PROGRAMLAMA DİLİ
KEREM SIRMA Ekim 26, 2014 9:47 Yorum Yok 13784
NEDEN RUBY PROGRAMLAMA DİLİ ?

Günümüzde yazılım geliştirmeyle uğraşan yazılımcılar, yazılımın karmaşıklığının ve artan boyutunun azaltılması , yazılımın süresinin kısaltılması vb sebeplerden dolayı nesne yönelimli programlama dillerine ihtiyaç duymuşlardır.Ruby programlama dilide nesne yönelimli programlama dillerinden biridir. Türkiye’ de adı pek duyulmasada dünyada en çok kullanılan programlama dilleri arasına girmiştir.

(http://blogs.gartner.com/mark_driver/2014/10/02/gartner-programming-language-index-for-2014/).

Bunda Ruby programlama dili kullanılarak yazılan Ruby on Rails (framework) ve programlama dilinin AÇIK KAYNAK KOD olması çok etkilidir.



Ruby 1995 yılından bu yana sürekli geliştirilen ,platform ayırt etmeyen ve yazılımcıya aşırı özgür bir ortam oluşturmasından dolayısıyla kısa surede yazılımcıyı kendine bağlar. Ruby’nin yaratıcısı YukihiroMatsumoto’nun “Dünyadaki tüm programcıların daha yaratıcı olmaları,programlamadan zevk almaları ve mutlu olmaları için yardım etmek” diyerek Rubynin asıl amacının ne olduğunu bizlere çok açık bir şekilde belirtmiştir. Bunun sonucu olaraktaPerl dilinden daha güçlü Phytondan daha fazla nesne yönelimli bir programlama dili ortaya çıkmıştır.



Ruby ‘nin genel özellikleri :

* Çok kolay anlaşılır, basit bir söz dizimine(syntax) sahiptir. Bu özelliğini Eiffel ve Adadillerinden almıştır.
* Kısa zamanda kolayca öğrenilebilir, bu özelliği dilin söz diziminin(syntax) sezgisel olmasından gelir.
* Moderndillerde olduğu gibi hata kontrol mekanizmasına sahiptir.
* Tamamıyle nesne yönelimli bir dildir.

* Ruby nesne yönelim konusunda yeniliklere açık özelliklere sahiptir. Örneğin bir sınıfa çalışma zamanında yeni metotlar ekleyebilirsiniz.
*Ruby sadece tekli kalıtımı desteklemektedir. Fakat modül kavramıyla çoklu kalıtım kullanılabilmektedir.
* Blok kavramı sayesinde işlevsellik arttırılabilmektedir.
* Kendine ait çöp toplayıcısı sayesinde bellek yönetimi çok kolaydır. İşaretle-süpür tekniği ile ek kütüphanelerde ki referans sayılarının yönetimine gerek yoktur.

Ruby yorumlayıcısıbirçok işletim sistemiiçin yazılmıştır. Hemen hemen tüm işletim sistemlerinde çalışabilir. Bunlardan bazıları şunlardır:
*Neredeyse tüm Unix türevleri

*Microsoft platformları (DOS, Windows 95/98/XP/NT/2000/2003/Vista)

*Mac OS X

*BeOS

*Amiga

*OS/2

*Symbian







Bu kadar özelliği ve rahatlığı olan bi dil Türkiyedeki çoğu yazılımcı tarafından duyulmadı .Buda insanların bu dile yaklaşımında bazı soru işareti barındırıyor. Bu algıyı yıkmak için size biraz dünya genelinden Ruby kullanılarak yazılmış bazı uygulamalardan bahsedeyim.





Simülasyonlar

NASA Langley Araştırma Merkezisimülasyonları yönetmek için Ruby kullanıyor.
“Motorola” da bir araştırma grubu:http://www.motorola.com Ruby’yisimülatör geliştirirken, hem senaryo üretmek için hemde işlem sonrası veriler için kullanıyor
3D Modelleme

Google SketchUpmakro geliştirme API’si için Ruby kullanan 3D modelleme uygulamasıdır.


İş

Toronto RehabBT yardım masası ve BT operasyon takımlarında çağrı destek ve yerinde destek yönetimi ve izlemesi için RubyWebDialogs tabanlı bir uygulama kullanır.
Robotik

MORPHAprojesinde, Ruby Siemens servis robotunun reaktif denetim kısmını uygulamak için kullanıldı.


Open Domain ServerIP ayarlarının gerçek zamanlı olarak güncellenmesini ve böylece statik domainler ile eşlenebilmesini sağlayan “Dynamic DNS” istemcileri Ruby ile yazıldı.
Telefonculuk

Ruby 3G kablosuz telefonculuk ürünü olan Lucentiçinde kullanılmaya başlandı.
Sistem Yönetimi

Level 3 Communicationsmerkezi veri toplama kısmını yazmak için Ruby kullanıldı. Dünya çapında dağılmış 1700 Unix (Solaris ve Linux) sunucu üzerinden gelen performans istatistiklerini toplayan Unix kapasite ve planlama sistemidir.
Web Uygulamaları

Basecamp, 37signalstarafından geliştirilen web tabanlı proje yönetim uygulamasıdır, tamamen Ruby ile yazılmıştır.
43 Thingshedeflerinin bir listesini tutmanı ve dünya ile paylaşmanı sağlar. Tamamen Ruby ile geliştirilmiştir.
A ListApart, yaklaşık 1997 yılından bu yana web-sitelerini yapan insanlar için bir dergi. Son zamanlarda yeniden canlandı ve Ruby On Rails ile oluşturulan özel bir uygulama kullanır.
Blue Sequence, Toyota Motor İmalatı’nın kendi “sequence-in-time” üretim sürecinin bir parçası olan gelişmiş,kritik bir uygulama, son zamanlarda British Computer (BCS) Bilgi Yönetimi Ödülleri’nde finalist olarak seçildi.
Güvenlik

Metasploit Framework, Rapid7tarafından yönetilen topluluk açık kaynak projesi, ağların ve uygulamarın güvenliğini değerlendirmede BT uzmanlarına yardımcı olan ücretsiz bir penetrasyon test platformudur. Metasploit Projesi 700,000 satırın üstünde koddan oluşur ve 2010 yılında 1 milyondan fazla indirilme sayısına ulaşmıştır. Ticari sürüm olanMetasploit Express ve Metasploit Pro Rapid7 tarafından geliştirilir ayrıca Ruby tabanlıdır.

Ruby ile neler yapılır? Ne için kullanılır?



Ruby nesne yönelimli bir programlama dilidir. Java, C# gibi derlenen değil PHP gibi JavaScript gibi yorumlanan bir dildir. Açık kaynak kodludur. Platform bağımsızdır. Çok basit bir sözdizimi vardır.

Ruby resmi sitesinde kendisinden şu şekilde bahseder.
ruby-lang.org/tr/about

Ruby'nin web frameworkü olan Ruby on Rails ile Ruby'nin popülaritesi yükselmiştir. Bunun başlıca nedenleri arasında dilin çok basit bir sözdizimine sahip olması ve diğer dillere göre kod yazarken daha az enerji harcamanız olarak kabaca ifade edebiliriz. Kişisel yorumumdur.

Ruby on Rails web frameworkü sitesi de şudur
rubyonrails.org/

Ruby on Rails (ROR die de geçer) ile MVC patternına uygun web projeleri geliştirebilirsiniz. Ruby ile script programlar yazabilirsiniz. Adını hatırlamadığım yabancı bir developer büyüğümüzün bir sözünde der ki şu an dünyada Ruby öğrenip de iş bulamayan hiç kimse bilmiyorum der. Bu söz ile gaza gelip Ruby öğrenmişliğim de vardır ancak ülkemizde kat edimesi gereken daha çok mesafe var. Kaderinizde varsa Ruby alanında uzmanlaşıp Nasa'da da çalışabilirsiniz. Kariyer sayfalarında görmüştüm bir zamanlar.




Java ve . NET gibi windows ya da linux tabanlı GUI (görsel arayüz, graphic user interface) içeren uygulamalar da geliştirebilirsiniz bazı ek araçlarla ancak GUI olarak . NET ve Java'nın sunduğu araçlar kadar güçlü değildir ve çok fazla bir geliştirme de bu konuda yok. Daha çok web projeleri odaklı güncelleştirmeleri gözlemliyoruz.

Şunu da söylemeden geçmeyelim. Ruby karşımıza IronRuby ve JRuby olarak da çıkmakta.
Bunlar da nedir derseniz bir iki link paylaşayım
en.wikipedia.org/wiki/IronRubyen.wikipedia.org/wiki/JRuby



Bunun anlamı Ruby yazarak . NET framework ve Java kütüphanelerine erişebilirsiniz. Yani Visual Studio'da Ruby kodlayabilir ve windows formlar ile çalışabilirsiniz aslında. Bu çok güzel bir özellik ancak şahsi düşüncem . NET ve Java platformların kütüphaneleri ile çalışıyorsanız işin doğasından ayrılmamalı bu yüzden bu kütüphaneleri C# ve Java ile kullanmaya devam etmeli. Geri kalan her şey fantezi geliyor. Madem Ruby ile . NET'de windows forms uygulaması yazılıyor böyle yapılana kadar Ruby kendi kütüphanelerini geliştirsin ve IDE'sini çıkarsın derim.

Örneğin Ruby ile oyun da yazabilirsiniz android uygulama da geliştirebilirsiniz ancak bunlar biraz daha akademik çalışma olarak kalıyor bence. Sektörde oyun programlama için ya da android uygulama geliştirme için tercih henüz tercih edilmiyor.

Ruby on Rails
Vikipedi, özgür ansiklopedi
Gezinti kısmına atlaArama kısmına atla
Ruby on Rails
Ruby On Rails Logo.svg
Geliştirici(ler) Rails Core Team
Kararlı sürüm 6.0.1 / 30 Haziran 2016 (3 yıl önce)[1]
Programlama dili Ruby
İşletim sistemi Çoklu platform
Tür Web uygulama çatısı
Lisans MIT Lisansı
Resmî sitesi http://rubyonrails.org/
Ruby On Rails ya da Rails, Ruby diliyle yazılmış, açık kaynak kodlu bir web uygulama geliştirme çatısıdır. Web uygulamaları için ihtiyaç duyulabilecek bütün bileşenleri barındıran Rails; model-view-controller, don't repeat yourself, convention over configuration yaklaşımlarını temel alır.[2]



Geçmiş
Ruby on Rails, David Heinemeier Hansson tarafından, gerçek bir proje yönetim aracı olan Basecamp uygulamasından çıkarılmış bir çatıdır. İlk versiyonu Haziran 2004'te, mevcut son ana versiyon 5.0 ise 30 Haziran 2016'da duyrulmuştur.

Sürüm Geçmişi
Sürüm Tarih Değişiklikler / Yeni Özellikler Notlar
1.0 13 Aralık 2005 (14 yıl önce) [3]
1.2 19 Ocak 2007 (13 yıl önce) [4]
2.0 7 Aralık 2007 (12 yıl önce) [5]
2.1 1 Haziran 2008 (11 yıl önce) [6]
2.2 21 Kasım 2008 (11 yıl önce) [7]
2.3 16 Mart 2009 (11 yıl önce) Rack, iç içe form desteği, şablon ve şablon motorlarında büyük güncellemeler [8]
3.0 29 Ağustos 2010 (9 yıl önce) Merb ile birleşim [9]
3.1 31 Ağustos 2011 31 Ağustos 2011 (8 yıl önce) Asset Pipeline, Streaming, jQuery, CoffeeScript ve Sass desteği [10]
3.2 20 Ocak 2012 (8 yıl önce) Journey engine, Tagged Logging [11]
4.0 25 Haziran 2013 (6 yıl önce) Russian Doll Caching, Turbolinks, Live Streaming [12]
4.1 8 Nisan 2014 (6 yıl önce) Spring, Enumeration, Mailer önizleme, secrets.yml [13]
4.2 19 Aralık 2014 (5 yıl önce) Active Job, asenkron email, Adequate Record, Web Console [14]
5.0 30 Haziran 2016 (3 yıl önce) ActionCable, API modu [15]
5.1 27 Nisan 2017 (3 yıl önce) [16]
5.2 9 Nisan 2018 (2 yıl önce) [17]
6.0 15 Ağustos 2019 (8 ay önce) [18]
Felsefesi
Rails, temel olarak Convention over Configuration ve Don't Repeat Yourself (DRY) yaklaşımları üzerine kurulmuştur.

"Convention over Configuration" ile, Ruby on Rails çatısı tarafından daha önceden belirlenmiş kurallara uygun yazılım geliştirilerek, çeşitli konfigürasyonel ve yazılımla ilgili rutin işlerin otomatik olarak Ruby on Rails çatısı tarafından yapılması kastedilmektedir. En iyi örnek, Ruby on Rails'in Model altyapısını oluşturan ActiveRecord yapısından verilebilir. Rails'de yazılım geliştirmeye başlamadan önce, veritabanında bulunan tablolar isimlendirilirken, İngilizce çoğul olacak şekilde verilirse (örneğin; customers, products vb.), kod içinde sadece customer.products şeklinde yazarak iki tablo arasında ilişki sağlanabilir ve müşterinin satın aldığı ürünlerin bilgisine başka herhangi bir kod yazmaya gerek kalmadan ulaşılabilir. Yazılımı kolaylaştırıcı benzer kurallar Ruby on Rails'de oldukça fazladır.

Don't Repeat Yourself (DRY) felsefesi ise aynı uygulama içinde aynı işi yapan kod parçalarının en aza indirilmesini öngörür. Örneğin, View altyapısında kullanılan "partial" yapısı, yazılmış bir kod parçacığını, birçok farklı noktada kullanabilmeyi sağlar. Rails, uygulamanın küçük parçalara ayrılarak, kod tekrarını önlemek konusunda oldukça başarılıdır.

Rails Yapısı
MVC yapısını oluşturan genel modüller şöyledir:

ActiveRecord (Model)
ActionView (View)
ActionController (Controller)
Rails Modülleri
ActionMailer
ActionController
ActionView
ActionWebService
ActiveRecord
ActiveSupport

ruby ile ilgili sorular

1) Ruby Nedir?
Ruby hayatımda gördüğüm en kolay script dillerinden biridir; pek fazla teknoloji ile alakası olmayanlar için yeterince basit, gelişmiş developerlar için güçlü kısacası herkes için fazlasıyla iyi. Çok karışık syntaxları yok . Bunun yerine oldukça basit Ingilizce syntax’lar ile yazılıyor.

2) Ruby ile Ruby on Rails arasındaki farklar nelerdir?
Ruby on Rails, Ruby dili ile yazılmış açık kaynak kodlu bir web uygulama geliştirme çatısıdır (framework). Ruby ise nesneye yönelik bir programlama dilidir.


3) Neden Ruby kullanalım?
Değişken bildirimleri gerekmez
Değişken türleri yoktur
Söz dizimi basit ve tutarlıdır
Bellek yönetimi özdevinimlidir

4) Ruby programlama dilimi?
Ruby, nesneye yönelik bir programlama dilidir.



5) Ruby nasıl kurulur?
Windows ve Linux platformları için buradan(http://www.burakavci.com.tr/2013/12/linux-sunucular-icin-ruby-kurulumu.html) bakabilirsiniz.


6) Ruby'ye benzer başka programlama dilleri var mıdır?
Ada, Perl, Smalltalk gibi programlama dillerinden etkilenmiştir ve Python ile kimi ortak söz dizimi özelliklerine sahiptir.


7) Hangi işletim sistemlerinde kullanılabilir?
Neredeyse tüm Unix türevleri
Microsoft platformları (DOS, Windows 95/98/XP/NT/2000/2003/Vista)
Mac OS X
BeOS
Amiga
OS/2
Symbian

8) Ruby'nin yaratıcısı kimdir?
Japon programcı Yukihiro Matsumoto "Matz"

9) Ruby'ye neden ihtiyaç duyulur?
Betik dil ile Nesneye yönelik dil ayrı kavramlardır. Nesneye yönelik programlama daha çok ayrıntı içerir ve daha kapsamlıdır. Nesneye yönelik programlamanın avantajlarını, Betik bir dil yapısında kullanabilmek için Ruby diline ihtiyaç duyulmuştur.

10) Ruby açık kaynak kod mudur?
Evet

11) Ruby'nin hazır kodları var mı?
Evet, Kaynak kısmından adreslere ulaşabilirsiniz.


12) Neden Ruby ortaya çıktı?
Matz'ın üniversite yıllarındaki en büyük hayali kendi programlama dilini tasarlamaktı. Nesneye yönelik programlamanın avantajlarını, betikleme alanında göstermek istiyordu. Aradığı özelliklere uygun bir dil yoktu. Bu yüzden ortaya çıktı.

13) JAVA ile Ruby'nin benzerlikleri neler?
Otomatik Çöp toplayıcısı
Değişkenlerin tiplerine uygun içerikte olup olmadığının sıkı kontrolü
Public, protected, private metotları
Gömülü dosya aracı (Rdoc - Javadoc'a benziyor)


14) GEMS Nedir?
Gems Ruby üzerinde yazılmış bir paket yönetim sistemidir. Linux’da ki yum , apt tarzı bir işlemdir. Üzerinde fazlasıyla paket bulundurur.

15) Rails Nedir?
Ruby On Rails, Ruby diliyle yazılmış, açık kaynak kodlu bir web uygulama geliştirme çatısıdır (framework). Rails adıyla da bilinen Ruby on Rails; Model-View-Controller (MVC) yaklaşımını benimsemekte olup, geliştiricilere web sunucusu bilgilerini toplama, veritabanındaki bilgileri sorgulama veya düzenleme ve sayfa şablonunu işleme noktalarında pek çok kolaylık sağlamaktadır.

16) Ruby ile ilgili kaynak siteler nelerdir?
https://www.ruby-lang.org/tr
http://rubyonrails.org
http://ruby-doc.org
http://www.java2s.com/Code/Ruby/CatalogRuby.htm
http://rubyforge.org


17) Ruby hangi tür uygulamalar için uygundur?
Metin işleme
CGI, Web, XML programlama
GUI uygulamaları
Yapay zeka ve keşifsel matematik
Genel Programlama
Programlama eğitimleri
Extreme programlama

18) Ruby'de değişken tanımlamaları nasıldır?
Ruby'nin sözdizimi günümüzde de yoğun olarak kullanılan Perl ve Python ile büyük benzerlikler gösterir. Sınıf ve metot tanımlamaları anahtar kelimelerle belirlenir. Ruby'de Perl'in aksine, değişken adlarının başında belirleyici karakterler ($, @@, %, ; gibi) kullanmak bir zorunluluk değildir. Python'un tersine girintilerin dilin sözdiziminde bir etkisi yoktur. 4 düzeyde değişken tanımlanabilir: Global, class, instance ve local


19) Ruby hangi sektörlerde kullanılır?
Simülasyonlarda, Robot bilimde, Oyunlarda, Telefonculuk ta, Bilimde
Bir Java’cının Gözünden Ruby
By Özcan Acar / Nis 03, 2013 / Programlama Dilleri
Son zamanlarda en çok merak edip, öğrenmek istediğim diller arasında geliyor Ruby. Ruby herkesin dilinden düşürmediği, dinamik veri tipli ve her şeyin istisnasız nesne olduğu bir programlama dili. 1993 yılında Yukihiro Matsumoto tarafından geliştirilmiş. 2006 senesinde Ruby on Rails çatısının oluşturulmasıyla popüler bir web programcılığı dili olmuş.


Bu yazımda bir Java programcısının, yani benim Ruby dilini nasıl algıladığını, bu dilin kendisini nasıl hissettirdiğini sizlere aktarmak istiyorum.

Java’da her zaman şöyle bir şey yapmak istemişimdir:

1
throw new Exception() if(abc....);
Böyle bir yapı Java’da mümkün değil. Onun yerine her zaman şöyle bir şey yazmak zorundasınız:

1
2
3
4
if(abc...)
{
throw new Exception();
}
Tek bir satır ile ifade etmek istediğim bir düşünce için Java’da dört satır kod yazmam gerekiyor. Java’nın en büyük sorunlarından birisi bu. Bu zamanla Java’da yazılan programların okunamaz hale gelmesine sebep oluyor. İşin içine birde hata yönetimi (Exception Handling) girdi mi, kodu anlayana aşk olsun. Ruby’de dikkatimi çeken ve Java’da hasretini çektiğim if ve unless yapıları oldu. Ruby’de şöyle bir şey mümkün:

1
2
puts 'hello world' if x==4
puts 'hello world' unless x==4
1
2
3
unless x == 4
puts 'hello world'
end
1
order.calculate_tax unless order.nil?
Belli bir düşünceyi Ruby’de olduğu gibi tek bir satır olarak ifade etmenin kodun okunabilirliği açısından çok büyük getirisi var. Bu satırı bir blok halinde yazmak elbette mümkün. Lakin bu ifade edilmek istenen düsüncenin kod arasında kaybolma rizikosunu artırıyor. Burada Ruby’nin takip ettigi filozofinin “ne kadar az kod, o kadar çok ifade edilmek istenen düsüncenin ön plana çıkması” olduğu belli oluyor.

Aynı sadelik Ruby’nin while ve until döngüleri için de geçerli:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
x = x+1 while x < 10
&#91;/source&#93;

&#91;source language='ruby'&#93;
x = x-1 until x == 10
&#91;/source&#93;

Ruby'de her şey nesne:

&#91;source language='ruby'&#93;
>> 4.class
==> Fixnum
>> 4+4
==> 8
>> 4.methods
==> ["inspect", "%", "<<", "singleton_method_added", "numerator","*","+","to_i"......&#93;
>> true.class
==> TrueClass
>> false.class
==> FalseClass
Java’da 4 rakamı int primitif tipine sahip iken, Ruby’de Fixnum tipinde bir nesne. 4.methods bu nesnenin sahip olduğu metotları sıralıyor. Ruby safkan bir nesneye yönelik programlama dili.

Ruby’de duck typing ismi verilen ilginç bir konsept uygulanmış. Bunun ne olduğunu açıklamadan önce bir Java örneği sunmak istiyorum.

1
2
3
4
public void printFileName(File file)
{
if(file.exists())...
}
printFileName() ismini taşıyan metodun file isminde bir parametresi bulunuyor. Metot gövdesinde bu parametrenin sahip olduğu sınıf tipine göre değişik metotlar koşturabilirim. Bunlardan bir tanesi exists() metodu. Bu metodu kullanabilmem için file ismindeki metot parametresinin File sınıfından türetilmiş olması gerekiyor, aksi taktirde exists() metodunu kullanamam. Java’da bir nesnenin sahip olduğu tip o nesnenin sınıfı tarafından belirleniyor. File tipinde olan bir değişken sadece File sınıfının metotlarını kullanabilir. Ruby’de durum farklı. Aradaki farkı görmek için bir Ruby örneğini inceleyelim:

1
2
3
4
def copy_file(obj, dest_path)
src_path = obj.get_path
puts "Copying file "#{src_path}" to "#{dest_path}"."
end
copy_file() metodunun obj ve dest_path isminde iki tane parametresi bulunuyor. Bu iki parametrenin hangi tipte olduğu belli değil. Tipini, yani sınıfını tanımadığım bir nesnenin nasıl olurda obj.get_path() şeklinde bir metodunu koşturubilirim? obj nesnesinin ait olduğu sınıfta get_path() isminde bir metod olduğunu nereden biliyorum? Bilmiyorum, bilmek te zorunda değilim.

Ruby’de her şey nesne. Durum böyle olunca Ruby’nin kontrol etmesi gereken tek şey, kullanmak istediğim metodun nesnede var olup, olmadığı. Eğer kullandığım metodu Ruby nesnede bulamassa NoMethodError hatası oluşturur. Bunu da yakalayıp, gerekli işlemi yapmak zor değil. Buradan çıkardığımız sonuç şu: Ruby nesneleri üzerinde istediğim herhangi bir metodu koşturabilirim. Eğer nesnenin böyle bir metodu varsa, nesne istediğim şekilde davranış sergileyecektir. Aksi taktirde NoMethodError hatası oluşacaktır. Bu Ruby’de nesne tipinin sahip olunan sınıfa göre değil, nesnenin ihtiva ettiği metotlara göre belirlendiği anlamına geliyor.

Ruby’de Java ya da C# da olduğu gibi bir sınıf tanımlamak zorunda kalmadan şu şekilde bir metot tanımlanabiliyor:

1
2
3
def bugunHavaSicakMi
true
end
Ruby’de her fonksiyon bir değer geri veriyor. Eğer metodun son satırında return komutu kullanılmadı ise, o zaman son satırda yer alan değer geri veriliyor. Yukarıda yer alan örnekte geri verilen deger true olacaktır.

Bir array şu şekilde tanımlanabiliyor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> hayvanlar = ['Kedi', 'Fare', 'Yilan']
==> ["Kedi", "Fare", "Yilan"]
>> puts hayvanlar
Kedi
Fare
Yilan
>> hayvanlar[0]
==> Kedi
>> hayvanlar[10]
==> nil
>> hayvanlar[-1]
==> "Yilan"
>> hayvanlar[0..1]
==> ["Kedi", "Fare"]
Var olmayan bir array elementine erişmek istediğimizde Ruby nil değerini geri veriyor. Java’da bu IndexOutOfBoundException hatası olurdu. Index olarak eksi değerler kullanıldığında Ruby arrayi sondan başa doğru görmeye başlıyor. Örneğin hayvanlar[-1] “Yilan”, hayvanlar[-2] “Fare” değerini geri verir.

Ruby ile ismi olmayan anonim fonksiyonlar tanımlanabiliyor. Bu anonim fonksiyon başka metotlara parametre olarak ta vermek mümkün. Aşağıdaki örnekte hello world ekranda üç sefer görüntülenir. Küme parantezi içinde yer alan kod aninim fonksiyondur.

1
3.times {puts 'hello world'}
Anonim fonksiyonları parametrelendirmek mümkündür. Aşağıdaki örnekte each bir for döngüsü oluşturup, hayvanlar isimli listenin her elementini döngü içinde anonim fonksiyona parametre olarak vermektedir. Tek satırlık kod ile tüm listenin içeriğini ekranda görüntülemek münkündür.

1
2
hayvanlar = ['Kedi', 'Fare', 'Yilan']
hayvanlar.each { |a| puts a}
Java’da anonim fonksiyon tanımlamak için bir anonim class implementasyonu oluşturmak gerekiyor. Bir listedeki değerleri anonim bir fonksiyon tarafından ekranda görüntülemek için aşağıdaki şekilde Java kodu yazardık:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package xxx;

import java.util.ArrayList;
import java.util.List;

public class Test {

final static List<String> animals = new ArrayList<String>() {
{
add("dog");
add("cat");
}
};

private static abstract class AnimalLister {
abstract void show(String animal);
}

public static void main(String[] args) {

each(new AnimalLister() {
@Override
void show(String animal) {
System.out.println(animal);
}
});
}

private static void each(AnimalLister animalLister) {

for (String animal : animals) {
animalLister.show(animal);
}
}
}
Java’da bir sınıfa yeni bir metot eklemek için ya o sınıfı yeniden derlemek, ya AOP kullanmak ya da sınıfı bytecode seviyesinde manipüle etmek gerekiyor. Ruby’de mevcut bir sınıfa yeni bir metot eklemek çocuk oyuncağı:

1
2
3
4
5
6
7
8
9
10
11
class Fixnum
def my_times
i=self
while i > 0
i = i-1
yield
end
end
end

3.my_times {puts 'hello world'}
Yukarıda yer alan Ruby örneğinde Fixnum isimli sınıfa my_times isminde yeni bir metot ekledik. Oluşturduğumuz bu yeni metodu 3.my_times şeklinde kullanabiliriz. JDK içindeki bir sınıfa doğrudan yeni bir metot eklemek istediginizi düşünün. Ruby’de mevcut her sınıfa yeni bir metot eklemek mümkün.

Java gibi nesneye yönelik programlama yapılan dillerde ortak kullanılan metot ve değişkenler kalıtım yolu ile altsınıflara verilir. Ruby’de bu mekanizma modüller aracılığı ile işlemektedir. Bir modül içinde fonksiyonlar ve değişkenler yer alır. Herhangi bir Ruby sınıfı tanımlı bir modülü kendi bünyesine kattığında, modül içinde yer alan tüm metot ve değişkenler sınıf tarafından kullanılabilir.

Aşağıda yer alan Ruby örneğinde ToFile isminde bir modül yer alıyor. to_f metodu to_s metodundan gelen değeri bir dosyaya ekliyor. to_s metodu modül bünyesinde tanımlı değil. Bu metodun modülü bünyesine katan sınıf tarafından implemente edilmiş olması gerekiyor. Ruby daha önce bahsettiğim duck typing yönetimi ile nesnenin to_s metoduna sahip olup, olmadığını kontrol ediyor.

Person sınıfı include ToFile ile modülü bünyesine katıyor ve to_f metodunu kendi bünyesinde tanımlıymış gibi kullanabilir hale geliyor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
module ToFile
def filename
"object_#(self.object_id).txt"
end

def to_f
File.open(filename, 'w') {|f| f.write(to_s)}
end
end


class Person
include ToFile
attr_accessor :name

def initialize(name)
@name = name
end

def to_s
name
end
end

Person.new('özcan acar').to_f
Bu örneği Java’da aşağıdaki şekilde yazabilirdik. Java’da sadece tanımlı olan metotlar kullanılabilir. Ruby ToFile modülü örneğinde yer alan to_s metodunu kullanabilmek için bu metodun bir sınıf bünyesinde tanımlı olması gerekir. Aşağıda yer alan örnekte To_S isminde bir interface sınıf tanımlayarak, to_s metodunu bu sınıfa ekliyoruz. Soyut olan ToFile sınıfı bu interface sınıfı implemente ettiği için to_s metodunu tanır hale geliyor. Person sınıfı ToFile sınıfını genişlettiği için to_s metodunu implemente etmek zorunda. Person sınıfı ToFile sınıfını genişlettiği için to_f metoduna sahip oluyor. Person nesnesi tarafından to_f metodu koşturulduğunda, to_f metodu person nesnesi bünyesinde yer alan to_s implementasyona erişip, gerekli değeri edinebiliyor.

Ruby ile Java arasındaki en büyük fark, Java’nın kullanılan metotların hangi sınıflara ait olduklarından haberdar olması zorunluluğu. Ruby duck typing mekanizması ile bu zorunluluğu ortadan kaldırıyor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public interface To_S {

String to_s();
}
public abstract class ToFile implements To_S {

public String filename() {
return this.getClass().getSimpleName();
}

public void to_f() {
FileUtils.writeStringToFile(new File("xxx"), to_s());
}
}
public class Person extends ToFile{

private String name;

public Person(String name) {
this.name = name;
}

@Override
public String to_s() {
return this.name;
}

public static void main(String[] args) {
new Person("özcan acar").to_f();
}
}
Bu kısa tanıtım umarım Ruby diline ilginizi çekebilmiştir. Ruby dilinin ifade edilmek istenen düşüncenin çok az satır ile, düşüncenin kod kargaşası arasında kaybolmadan implemente edilmesini mümkün kılması beni etkileyen en önemli özelliği oldu. Benim için ön planda olan kodun nasıl yazıldığı değil, düşüncenin kod olarak nasıl ifade edildiğidir. Programcılıkta zamanla ilgi alanı problem çözme, algoritma kullanımı vs. gibi konulardan, düşüncelerin sade ve çok kısa kod parçası olarak kodlanabilmesi yönüne kaymaktadır. Bu en azından benim için geçerli olan bir durumdur. Bu sebepten dolayı Ruby gibi düşüncelerin sade ve yüksek bir soyutluk seviyesinde ifade edilmesine izin veren dilleri tercih ederim.
     
 
what is notes.io
 

Notes.io is a web-based application for taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000 notes created and continuing...

With notes.io;

  • * You can take a note from anywhere and any device with internet connection.
  • * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
  • * You can quickly share your contents without website, blog and e-mail.
  • * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
  • * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.

Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.

Easy: Notes.io doesn’t require installation. Just write and share note!

Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )

Free: Notes.io works for 12 years and has been free since the day it was started.


You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;


Email: [email protected]

Twitter: http://twitter.com/notesio

Instagram: http://instagram.com/notes.io

Facebook: http://facebook.com/notesio



Regards;
Notes.io Team

     
 
Shortened Note Link
 
 
Looding Image
 
     
 
Long File
 
 

For written notes was greater than 18KB Unable to shorten.

To be smaller than 18KB, please organize your notes, or sign in.