0Pricing
Ruby Academy · Ders

Tembel Numaralandırıcılar

Tembel değerlendirme

Tembel Numaralandırıcılar, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.

Tembel Değerlendirme

Normalde Enumerable yöntemleri koleksiyonun tamamını tek seferde işler. Tembel bir numaralandırıcı, öğeleri yalnızca gerektiği kadar, birer birer işler. Bu sayede çok büyük, hatta sonsuz dizilerle çalışabilirsiniz.

result = (1..Float::INFINITY).lazy.map { |n| n * 2 }.first(5)
p result

Önceden Çalıştırılan Yöntemlerin Sorunu

Sonsuz bir aralıkta lazy olmadan map çağırmak hiç bitmez; çünkü önce eksiksiz bir sonuç dizisi oluşturmaya çalışır.

# Eager version would hang. Lazy completes instantly:
first_three = (1..Float::INFINITY).lazy.select(&:even?).first(3)
p first_three

Tembel Numaralandırıcı Oluşturma

Tembel bir sürüm elde etmek için herhangi bir numaralandırılabilir yapı üzerinde .lazy çağırın. Ardışık yöntemler de böylece tembel hâle gelir.

lazy = (1..10).lazy
puts lazy.class

Zorlanana Kadar Hiçbir Şey Çalışmaz

Tembel zincirler bir tarif oluşturur, ancak bunu çalıştırmaz. first, to_a veya force gibi sonlandırıcı bir yöntem çalışmayı başlatır.

chain = (1..Float::INFINITY).lazy.map { |n| n * n }
puts "Nothing computed yet"
p chain.first(4)

Sonuçları Zorlamak

force (to_a diğer adıyla), sınırlandırılmış tembel bir zinciri diziye dönüştürür.

result = (1..20).lazy.select(&:odd?).first(5)
p result
all = (1..6).lazy.map { |n| n * 10 }.force
p all

Tembel Zincirleme

Birden çok tembel işlem ayrı ayrı tam geçişler hâlinde çalışmak yerine öğe bazında birbirine geçer. Bir sonraki değer işlenmeden önce her değer zincirin tamamından geçer.

result = (1..Float::INFINITY)
  .lazy
  .map { |n| n * n }
  .select { |n| n.even? }
  .first(4)
p result

take ve Koşula Kadar Alma

Tembel take ve take_while, koşulları karşılandığında değer çekmeyi bırakır.

result = (1..Float::INFINITY).lazy.take_while { |n| n < 6 }.to_a
p result

Sonsuz Diziler

Tembel numaralandırıcılar, üreteçlerle birlikte kullanıldığında çok etkilidir. Sonsuz akışları modellemek için onları Enumerator ile eşleştirin.

naturals = Enumerator.new do |y|
  n = 1
  loop { y << n; n += 1 }
end
p naturals.lazy.map { |x| x * 3 }.first(5)

Bellek Verimliliği

Tembel zincirler aradaki koleksiyonun tamamını hiçbir zaman bellekte oluşturmadığı için, büyük verileri birkaç sonuca indirgerken bellek tasarrufu sağlar.

big = (1..1_000_000).lazy
first_match = big.select { |n| n % 7 == 0 && n % 11 == 0 }.first
puts first_match

Tembel Değerlendirme Ne Zaman Kullanılır

Tembel değerlendirmeyi şu durumlarda kullanın:

  • Kaynak sonsuz veya çok büyükse.
  • Yalnızca birkaç sonuca ihtiyacınız varsa.
  • Büyük aradaki dizilerden kaçınmak istiyorsanız.

Küçük koleksiyonlarda önceden çalışan yöntemler daha basit ve yeterince hızlıdır.

fizz = (1..Float::INFINITY).lazy.select { |n| n % 3 == 0 }.first(5)
p fizz

Hepsini Birleştirme

Tembel numaralandırıcılar çalışmayı erteler:

  • .lazy bir zinciri tembel hâle getirir.
  • Çalışma yalnızca sonlandırıcı bir yöntem değerleri çektiğinde gerçekleşir.
  • Sonsuz veya çok büyük diziler için idealdir.
squares = (1..Float::INFINITY).lazy.map { |n| n * n }
p squares.select(&:odd?).first(4)

Kısa Kontrol

Tembel numaralandırıcılarla ilgili anlayışınızı test edin.

Özet

Tembel numaralandırıcıları öğrendiniz:

  • .lazy hesaplamayı erteler.
  • Sonlandırıcı yöntemler (first, to_a, force) çalışmayı başlatır.
  • Her değer, gerektiğinde zincirin tamamından geçer.
  • Sonsuz veya büyük diziler için idealdir.
p (1..Float::INFINITY).lazy.select(&:even?).map { |n| n + 1 }.first(3)

Sıkça Sorulan Sorular

“Tembel Numaralandırıcılar” dersi ücretsiz mi?

Evet — “Tembel Numaralandırıcılar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.

“Tembel Numaralandırıcılar” dersinde ne öğreneceğim?

Tembel değerlendirme Ruby Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Ruby Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Tembel Numaralandırıcılar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Ruby Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Ruby Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Özel each Yazma
  2. Enumerable'ı Dahil Etme
  3. Tembel Numaralandırıcılar
  4. Enumerator Nesneleri
← Ruby Academy Sayfasına Dön