Diziler sıralı koleksiyonlardır; hash'ler anahtar-değer koleksiyonlarıdır (sözlükler/haritalar gibi). Ruby'nin iki ana veri yapısıdır ve her ikisi de zengin, anlamlı yöntemlere sahiptir (büyük ölçüde Enumerable modülünden gelen) ve veri manipülasyonunu zarafet içinde yapar.
Diziler — sıralı koleksiyonlar
fruits = ["apple", "banana", "cherry"]
fruits[0] # "apple" — index access
fruits[-1] # "cherry" — negative indexes from the end
fruits << "date" # append (or .push)
fruits.length # size
fruits.include?("apple") # membership
# Ruby's elegant array methods (from Enumerable)
fruits.map { |f| f.upcase } # transform each
fruits.select { |f| f.length > 5 } # filter
fruits.each { |f| puts f } # iterate
[3, 1, 2].sort # [1, 2, 3]
[1, 2, 3].sum # 6
Diziler dinamiktir, sıralıdır, indekslidir (negatif-indeks desteğine sahip), ve veri işleme için zengin bir yöntem serisine sahiptir (map, select, reduce, vb.).
Hash'ler — anahtar-değer koleksiyonları
# symbol keys (the idiom) with modern syntax
user = { name: "Ann", age: 30, role: :admin }
user[:name] # "Ann" — access by key
user[:email] = "[email protected]" # add/set
user.key?(:name) # check key existence
user.fetch(:name) # access with an error if missing (or a default)
# iterate key-value pairs
user.each { |key, value| puts "#{key}: #{value}" }
user.keys; user.values
user.map { |k, v| "#{k}=#{v}" }
Hash'ler anahtarları değerlere eşler. İdiyomatik sözdizimi sembol anahtarlar kullanır ({ name: "Ann" }), ve hash'ler erişim, yineleme ve dönüşüm için zengin yöntemlere sahiptir. fetch eksik anahtarlar için güvenli erişim sağlar (varsayılan bir değer veya hata ile).
Faydalı desenler
# default values
counts = Hash.new(0)
counts[:x] += 1 # works even though :x wasn't set (default 0)
# nested structures (common for JSON-like data)
data = { users: [{ name: "Ann" }, { name: "Bob" }] }
data[:users].first[:name] # "Ann"
Neden önemli
Diziler ve hash'ler Ruby'nin temel veri yapılarıdır — veri koleksiyonlarını depolamak ve işlemek için sürekli kullanılırlar — bu nedenle bunları öğrenmek günlük iş için gereklidir. Diziler (sıralı, indeksli koleksiyonlar, negatif-indeks desteği ile) ve hash'ler (anahtar-değer haritaları) veri işleme gereksinimlerinin büyük çoğunluğunu karşılar (listeler, kayıtlar, konfigürasyon, JSON benzeri veriler).
Ruby'de bunları özellikle güçlü kılan şey, zengin, anlamlı yöntem kütüphaneleridir (büyük ölçüde Enumerable modülünden) — map, select, reduce, each ve daha birçoğu — bu da veri dönüştürmenize, filtrelemenize ve işlemenize imkan verir; ayrıntılı döngüler yerine zarif, okunabilir kod ile Ruby'nin anlamlı stilini somutlaştırır.
Idiyomatik kuralları bilmek — özellikle hash'ler için sembol anahtarlar ({ name: "Ann" }) ve Hash.new(0) gibi faydalı desenler varsayılan değerler için, fetch güvenli erişim için, ve karmaşık veriler için iç içe yapılar — temiz, idiyomatik Ruby yazmak için önemlidir.
Diziler ve hash'ler hemen hemen her Ruby programında ortaya çıktığından ve zengin yöntemleri Ruby'nin zarif veri işleme stilinin merkezi olduğundan (ve Rails, JSON ve API'lerle çalışmak için), bunlarla akıcılık — oluşturma, erişim, yineleme ve dizi ile hash dönüştürme — etkili, idiyomatik Ruby geliştirmenin temelini oluşturan, bilinmesi gereken bilgidir.
