Scala for Backend Engineering & Functional Programming · Ders

Tembelce Alma ve Filtreleme

Sonsuz akışları dilimleyin.

4. ders / 413 adım

Tembelce Alma ve Filtreleme, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 4. 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, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

Tembel Tüketim

LazyList'in asıl değeri, onu tükettiğinizde ortaya çıkar. take, filter ve map gibi işlemler tembel kalır ve yalnızca sonunda zorladığınız hücreleri hesaplar.

Bu derste temel dönüştürücüleri ve tembelliği doğru anda nasıl sonlandıracağınızı ele alacağız.

take(n)

take(n), en fazla ilk n elemanı içeren ve kendisi de tembel olan bir LazyList döndürür. Sonucu zorlayana kadar hiçbir şey hesaplanmaz.

Bu, sonsuz bir akışın sınırlandırılmasını güvenli şekilde sağlar.

object Demo extends App {
  val first5 = LazyList.from(1).take(5)
  println(first5.toList)
}

takeWhile

takeWhile(p), koşul doğru olduğu sürece elemanları verir ve ilk başarısızlıkta durur.

Sonsuz bir akışta bu, kaç eleman olduğunu bilmenizi gerektirmeyen temiz bir durma koşuludur.

object Demo extends App {
  val small = LazyList.from(1).takeWhile(_ < 6)
  println(small.toList)
}

drop ve dropWhile

drop(n) ilk n elemanı atlar; dropWhile(p) ise koşul doğru olduğu sürece elemanları atlar. İkisi de tembel bir kalan bölüm döndürür.

Bir dilimi almadan önce akış içinde ilerlemek için bunları kullanın.

object Demo extends App {
  val rest = LazyList.from(1).drop(3).take(3)
  println(rest.toList)
}

Tembel filter

Bir LazyList üzerindeki filter tembeldir: elemanları yalnızca aşağı akıştaki tüketici onları istediğinde sınar.

take ile birlikte kullanıldığında, talebi karşılamak için kaynak elemanların tam olarak yeterli kısmını işler; fazlasını değil.

object Demo extends App {
  val evens = LazyList.from(1).filter(_ % 2 == 0)
  println(evens.take(4).toList)
}

Talebi Görmek

Kaç elemanın sınandığını görmek için koşulun içine bir yazdırma işlemi ekleyin. Süzme işlemi yalnızca take tamamlanana kadar çalışır.

Bunu çalıştırın: "check" satırlarının sayısı, tüm akışın değil, talep odaklı değerlendirmenin yapıldığını gösterir.

object Demo extends App {
  val r = LazyList.from(1).filter { n =>
    println("check " + n); n % 3 == 0
  }
  println(r.take(2).toList)
}

map ve filter Zincirlemek

Dönüştürücüleri zincirleyebilirsiniz; tüm işlem hattı tembel kalır ve eleman bazında birleştirilir. Her kaynak elemanı, yalnızca istendiğinde map işleminden ve ardından filter işleminden geçer.

Tam ara koleksiyonlar oluşturulmaz.

object Demo extends App {
  val r = LazyList.from(1).map(_ * _).filter(_ > 10).take(3)
  println(r.toList)
}

find: Erken Durma

find(p), eşleşen ilk elemanı bir Option olarak döndürür ve yalnızca o elemana kadar olan kısmı zorlar. Sonsuz bir akışta arama yapmak için idealdir.

Bir eşleşme bulunduğunda değerlendirme hemen durur.

object Demo extends App {
  val firstBig = LazyList.from(1).find(_ * _ > 50)
  println(firstBig)
}

headOption ve exists

headOption ilk elemana güvenli şekilde bakar; exists(p) bir eşleşme bulana kadar zorlar, hiç eşleşme yoksa sonsuza dek devam eder. Eşleşmenin kesin olduğu durumlar dışında sonsuz akışlarda exists kullanmayın.

İkisi de mümkün olan en erken noktada durur.

object Demo extends App {
  val has = LazyList.from(1).exists(_ == 7)
  println(has)
}

Sonucu Zorlamak

Tembel dönüştürücüler yapılacak işi tanımlar; sonlandırıcı bir işlem bu işi zorlar. toList, foreach, sum ve foldLeft, sınırlandırılmış akışı tüketir ve somut bir değer üretir.

Tüm akışın tüketilmesini gerektiren bir sonlandırıcı işlemden önce sonsuz akışı her zaman sınırlandırın.

object Demo extends App {
  val total = LazyList.from(1).take(100).sum
  println(total)
}

Süzme Sırasında Tuzaklar

Hiçbir şeyi eşleştirmeyen bir filter, sınırlandırılmış bir take işlemini sonsuz bir aramaya dönüştürür. LazyList.from(1).filter(_ < 0).take(1) sonsuza kadar bekler.

Koşulların karşılanabileceğinden emin olun veya işlemin sonlanmasını garanti etmek için süzmeyi takeWhile ile eşleştirin.

Kısa Kontrol

Tembel tüketim konusundaki anlayışınızı kontrol edin.

Özet

take, takeWhile, drop, filter ve map tembel kalır ve eleman bazında birleştirilir; find, exists ve headOption erken durur; toList ve sum gibi sonlandırıcılar sonucu zorlar.

Sonsuz akışlarda karşılanamayacak süzme koşullarına karşı dikkatli olun. Artık tembel dizileri güvenle üretebilir ve tüketebilirsiniz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Scala öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
39
Dersler
143

Sıkça Sorulan Sorular

“Tembelce Alma ve Filtreleme” dersi ücretsiz mi?

Evet — “Tembelce Alma ve Filtreleme” 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 Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.

“Tembelce Alma ve Filtreleme” dersinde ne öğreneceğim?

Sonsuz akışları dilimleyin. Scala for Backend Engineering & Functional Programming 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.

Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, 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 4. dersidir.

“Tembelce Alma ve Filtreleme” 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 Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Scala for Backend Engineering & Functional Programming 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. Tembelliği Açıklama
  2. LazyList Oluşturma
  3. Sonsuz Akışlar
  4. Tembelce Alma ve Filtreleme
← Scala for Backend Engineering & Functional Programming Sayfasına Dön