Ruby, programcı verimliliğini ve okunabilirliği ön plana alan, dinamik ve tümüyle nesne yönelimli bir programlama dilidir. Web uygulamalarından komut satırı araçlarına, otomasyon betiklerinden statik site üreticilerine kadar geniş bir alanda kullanılır. Bu rehberde Ruby'nin ne olduğunu, nasıl çalıştığını, güçlü ve zayıf yönlerini ve en çok hangi projelerde tercih edildiğini sade ve dengeli biçimde ele alıyoruz.
Ruby Nedir?
Ruby; yüksek seviyeli, dinamik ve açık kaynaklı, genel amaçlı bir programlama dilidir. "Yorumlanan" (interpreted) bir dil olarak çalışır; yani kod, önceden makine diline derlenmek yerine çalışma anında yürütülür. Dilin en yaygın uygulaması, C dilinde yazılmış olan ve genellikle MRI(Matz's Ruby Interpreter) ya da CRubyolarak anılan resmi uygulamadır.
Ruby dinamik tiplibir dildir: değişkenlerin türünü önceden bildirmeniz gerekmez, tür çalışma anında belirlenir. En belirgin özelliği ise saf nesne yönelimliolmasıdır; dildeki hemen her şey, sayılar ve nildâhil, bir nesnedir. Bellek yönetimi otomatik çöp toplama (garbage collection) ile yapılır ve dil; nesne yönelimli, yordamsal ve fonksiyonel yaklaşımları bir arada kullanmaya izin verir.
Ruby'nin Kısa Tarihçesi
Ruby, Japon geliştirici Yukihiro Matsumoto (topluluk içinde kısaca Matz) tarafından geliştirildi ve ilk kez 1995 yılında kamuya açık olarak yayımlandı. Matz, Perl, Smalltalk, Python ve Lisp gibi dillerden ilham aldığını; amacının hem güçlü hem de yazması keyifli bir dil ortaya koymak olduğunu belirtir.
Dil zamanla önemli aşamalardan geçti. 1.9 serisiyle birlikte YARVadlı sanal makine devreye girdi ve çalıştırma modeli belirgin biçimde hızlandı. 2.x serisi kararlılık ve olgunlukla anıldı. 3.0 sürümü ise performans, eşzamanlılık ve tip ipuçları gibi başlıklara odaklanan yeni bir dönemi başlattı.
Ruby Nasıl Çalışır?
Yazdığınız .rbdosyası çalıştırıldığında, kaynak kod önce bytecodeadı verilen bir ara forma çevrilir; ardından bu bytecode, MRI içindeki YARVsanal makinesi tarafından yürütülür. Bu model, aynı kodun farklı işletim sistemlerinde çalışabilmesini kolaylaştırır.
MRI'de bilinmesi gereken bir ayrıntı, GVL(Global VM Lock; eski adıyla GIL) mekanizmasıdır. Bu kilit, aynı anda yalnızca bir iş parçacığının Ruby bytecode'unu yürütmesine izin verir. Bu yüzden CPU'ya bağlı (CPU-bound) paralel işlerde tek başına iş parçacıkları (thread) beklenen hızlanmayı vermeyebilir. Bu tür durumlarda geliştiriciler ayrı süreçlere (process), C tabanlı kütüphanelere veya Ruby 3 ile gelen Ractorgibi eşzamanlılık modellerine yönelir.
Performans tarafında öne çıkan bir gelişme de YJITadlı tam zamanlı (JIT) derleyicidir. YJIT, sık çalışan kodu çalışma anında makine koduna çevirerek birçok senaryoda hız kazandırmayı hedefler ve son yıllarda resmi Ruby dağıtımının bir parçası hâline gelmiştir. JIT'in getirisi iş yüküne göre değişir; her uygulama aynı oranda hızlanmaz, bu yüzden kazancı kendi kodunuzda ölçmek önemlidir.
# Basit bir örnek: 1'den 5'e kadar sayıların karesi
(1..5).each do |n|
puts "#{n} => #{n * n}"
end
# Cikti:
# 1 => 1
# 2 => 4
# 3 => 9
# 4 => 16
# 5 => 25Alternatif Ruby Uygulamaları
Ruby dendiğinde çoğu zaman resmi uygulama olan MRI akla gelir; ancak dilin farklı ihtiyaçlara yönelik başka uygulamaları da vardır. Bunlar aynı Ruby dilini yorumlar, fakat çalışma ortamları ve performans özellikleri farklılık gösterir.
- MRI / CRuby: C dilinde yazılmış resmi ve en yaygın uygulama; çoğu proje bunu kullanır.
- JRuby: Ruby'yi Java Sanal Makinesi (JVM) üzerinde çalıştırır ve Java ekosistemiyle entegrasyon sağlar.
- TruffleRuby: Yüksek performans hedefiyle geliştirilen, GraalVM tabanlı bir uygulamadır.
Çoğu geliştirici için varsayılan tercih MRI olsa da, JVM ile bütünleşmek ya da belirli iş yüklerinde farklı bir performans profili aramak gibi durumlarda alternatif uygulamalar değerlendirilebilir.
Sözdizimi ve Temel Özellikler
Ruby'nin sözdizimi sade ve neredeyse günlük İngilizceye yakındır. Kod blokları süslü parantez yerine genellikle endanahtar kelimesiyle kapatılır, satır sonlarında noktalı virgül zorunlu değildir ve okunabilirlik dilin en çok öne çıkan yönlerinden biridir. Aşağıda dilin dikkat çeken bazı özellikleri sıralanmıştır.
- Sade, okunabilir ve doğal dile yakın sözdizimi
- Dinamik tipleme ve otomatik bellek yönetimi (çöp toplama)
- Blok, proc ve lambda gibi güçlü birinci sınıf fonksiyon yapıları
- Modüller aracılığıyla kod paylaşımı sağlayan mixin desteği
- Ördek tiplemesi (duck typing) ile esnek nesne davranışı
- Metaprogramlama için geniş ve dile gömülü olanaklar
Bloklar, Ruby'nin imza özelliklerinden biridir. Bir yöntemin (method) sonuna eklenen kod parçaları, koleksiyonlar üzerinde döngü kurmayı ve tekrarlı işleri kısa ve okunaklı biçimde ifade etmeyi sağlar.
names = ["ayse", "mehmet", "zeynep"]
# Blok ile donusum
capitalized = names.map { |name| name.capitalize }
puts capitalized.inspect
# => ["Ayse", "Mehmet", "Zeynep"]
# Kosula gore filtreleme
long_names = names.select { |name| name.length > 4 }
puts long_names.inspect
# => ["mehmet", "zeynep"]Her Şey Bir Nesnedir
Ruby'yi birçok dilden ayıran temel nokta, tutarlı nesne yönelimli yapısıdır. Sayılar, metinler, nilve hatta sınıfların kendisi birer nesnedir; dolayısıyla üzerlerinde doğrudan yöntem çağırabilirsiniz. Bu tutarlılık, dilin geneline sade ve tahmin edilebilir bir his verir.
# Sayilar da nesnedir, uzerlerinde yontem cagrilabilir
3.times { puts "Merhaba" }
puts 42.even? # true
puts "ruby".upcase # RUBY
puts (-7).abs # 7
puts nil.to_s.empty? # trueSınıflar arasında kod paylaşımı için Ruby, çoklu kalıtım yerine modültabanlı mixinyaklaşımını kullanır. Bir modülü bir sınıfa dâhil ederek (include) o sınıfa yeni davranışlar kazandırabilirsiniz. Bu yaklaşım, çoklu kalıtımın getirdiği karmaşıklıktan kaçınırken kodu yeniden kullanmanın düzenli bir yolunu sunar. Dilin metaprogramlama yetenekleri de güçlüdür; mevcut sınıflara çalışma anında yöntem eklemek ya da davranışları dinamik olarak tanımlamak mümkündür. Bu esneklik güçlü olsa da, dikkatli kullanılmadığında kodun okunmasını ve bakımını zorlaştırabilir.
Ruby on Rails ve Ekosistem
Ruby'nin geniş kitlelere ulaşmasında en büyük etken, 2000'li yılların ortasında David Heinemeier Hansson tarafından tanıtılan Ruby on Railsweb çatısıdır. Rails; "yapılandırma yerine uzlaşı" (convention over configuration) ve "kendini tekrar etme" (DRY) ilkelerini benimseyen, MVC mimarisine dayalı bir çatıdır ve web uygulaması geliştirmeyi belirgin biçimde hızlandırır.
Rails tek başına değildir. Daha küçük ve esnek işler için Sinatragibi hafif çatılar, içerik siteleri için Jekyllgibi statik site üreticileri ve altyapı otomasyonunda Chefgibi araçlar da Ruby ile yazılmıştır. Bu araçlar, dilin yalnızca web ile sınırlı olmadığını, aynı zamanda geniş bir yardımcı program yelpazesinde de kullanıldığını gösterir. Dünyanın büyük ölçekli web platformlarının bir bölümü uzun yıllar Rails üzerinde geliştirildi; bu durum, dilin ciddi üretim ortamlarında da tercih edildiğinin bir göstergesidir.
Sunucu tarafı diller ailesinde Ruby yalnız değildir. Aynı katmanda değerlendirilen diğer diller için PHP Nedir?ve Python Nedir?rehberlerine göz atabilirsiniz. Tarayıcı ve sunucu tarafında yaygın kullanılan JavaScript ekosistemini merak ediyorsanız Node.js Nedir?iyi bir başlangıç noktasıdır.
Gem'ler ve Paket Yönetimi
Ruby'nin en güçlü yanlarından biri, olgun paket ekosistemidir. Üçüncü taraf kütüphaneler gemolarak adlandırılır ve büyük ölçüde RubyGems altyapısı üzerinden dağıtılır. Projelerde bağımlılıkları düzenli ve tekrarlanabilir biçimde yönetmek için ise Bundleraracı ve bir Gemfilekullanılır.
# Tekil bir gem kurmak
gem install rails
# Proje bagimliliklarini Bundler ile yonetmek
bundle init # Gemfile olusturur
bundle install # Gemfile'daki gem'leri kurar
bundle exec rspec # Bagimliliklarla tutarli sekilde calistirirRuby Nerelerde Kullanılır?
Ruby çok yönlü bir dildir; ancak en güçlü olduğu alan web geliştirmedir. Aşağıdaki tablo, dilin başlıca kullanım alanlarını ve her biriyle sık anılan araçları özetler.
| Alan | Örnek kullanım | Sık kullanılan araçlar |
|---|---|---|
| Web geliştirme | Sunucu tarafı uygulamalar ve API'ler | Ruby on Rails, Sinatra |
| Statik site üretimi | Blog ve dokümantasyon siteleri | Jekyll |
| Altyapı otomasyonu | Sunucu yapılandırma ve dağıtım | Chef, çeşitli DevOps araçları |
| Komut satırı araçları | Betikler ve CLI uygulamaları | Standart kütüphane, Thor |
| Test ve otomasyon | Otomatik test ve iş akışları | RSpec, Rake |
Güçlü ve Zayıf Yönler
Her dil gibi Ruby de her iş için ideal değildir. Karar verirken güçlü yönlerini ve sınırlarını birlikte değerlendirmek yararlıdır.
| Güçlü Yönler | Sınırlar |
|---|---|
| Okunabilir ve geliştirici dostu sözdizimi | Derlenen dillere kıyasla genelde daha yavaş çalışma zamanı |
| Rails ile hızlı web geliştirme | CPU'ya bağlı paralel işlerde GVL kısıtı |
| Olgun gem ekosistemi ve güçlü topluluk | Mobil uygulama geliştirmede baskın tercih değil |
| Metaprogramlama ile yüksek esneklik | Dinamik tipleme büyük projelerde ek disiplin gerektirir |
Ruby Öğrenmeye Nasıl Başlanır?
Ruby, sade sözdizimi ve hızlı geri bildirim döngüsü sayesinde öğrenmesi keyifli bir dildir. Temelleri kavradıktan sonra küçük projelerle pratik yapmak, öğrenilenleri kalıcı hâle getirmenin en etkili yollarından biridir. Sağlam bir başlangıç için aşağıdaki sıra iyi işler.
- Değişkenler, temel veri türleri ve operatörler
- Koşullar, döngüler ve yöntemler (method)
- Dizi (Array) ve karma (Hash) gibi veri yapıları
- Bloklar, proc ve lambda kavramları
- Sınıflar, modüller ve nesne yönelimli tasarım
- gem'ler, Bundler ve küçük ama bitmiş projeler (basit bir CLI ya da web uygulaması)
Dilleri karşılaştırarak öğrenmeyi seviyorsanız, büyük resmi görmek için Programlama Dilleri Rehberiiyi bir pusuladır.
Sık Sorulan Sorular
Ruby ile Ruby on Rails aynı şey mi?
Hayır. Ruby bir programlama dilidir; Ruby on Rails ise bu dille yazılmış bir web geliştirme çatısıdır. Rails, Ruby'yi popüler yapan en önemli araçlardan biridir ancak Ruby'yi Rails olmadan da birçok alanda kullanabilirsiniz.
Ruby derlenen mi yoksa yorumlanan bir dil mi?
Ruby genellikle yorumlanan bir dil olarak anılır. Teknik olarak kaynak kod önce bytecode'a çevrilir ve sanal makine tarafından yürütülür; ayrıca YJIT gibi JIT derleyiciler sık çalışan kodu makine koduna çevirebilir. Yine de klasik anlamda önceden makine koduna derlenen bir dil değildir.
Ruby yeni başlayanlar için uygun mu?
Evet. Sade ve okunabilir sözdizimi, Ruby'yi ilk dil olarak öğrenmek isteyenler için iyi bir seçenek yapar. Özellikle web geliştirmeye ilgi duyanlar, Rails ekosistemi sayesinde görece kısa sürede çalışan projeler ortaya koyabilir.