Sonsuz Akışlar
Sonsuz verileri güvenle modelleyin.
Sonsuz Akışlar, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming 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, 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.
Güvenli Bir Şekilde Sonsuzluk
Bir LazyList sonsuz bir diziyi tanımlayabilir; çünkü kuyruğu istenene kadar hesaplanmaz. Yalnızca tükettiğiniz ön eki somutlaştırırsınız.
Bu, doğal sayıları, asal sayıları veya sensör okumalarını baştan bir sınır koymadan modellemenizi sağlar.
Tüm Doğal Sayılar
LazyList.from(1), 1, 2, 3, ... biçimindeki sonsuz dizidir. Herhangi bir sonlu ön eki alabilirsiniz.
Tümünü zorlamak hiçbir zaman tamamlanmaz; bu nedenle her zaman take ile bir parça alın veya bir yüklemle durdurun.
object Demo extends App {
val nats = LazyList.from(1)
println(nats.take(5).toList)
}Adımlı from
LazyList.from(start, step), belirli bir aralıkla sayar. Çift sayılar, vuruşlar veya herhangi bir aritmetik dizi için kullanın.
Dizi sonsuzdur, ancak her take çağrısı yalnızca istediğiniz kısmı zorlar.
object Demo extends App {
val evens = LazyList.from(0, 2)
println(evens.take(5).toList)
}Kendisine Başvuran Akışlar
Ünlü bir yöntem: bir LazyList'i kendisini kullanarak tanımlamak. Fibonacci dizisi, akışı kendi kuyruğuyla zip ederek yazılabilir.
Bu yalnızca kuyruk her hücre çekilene kadar değerlendirilmeme durumunda kaldığı için çalışır.
lazy val fibs: LazyList[Int] =
0 #:: 1 #:: fibs.zip(fibs.tail).map { case (a, b) => a + b }
// fibs(0)=0, fibs(1)=1, fibs(2)=1 ...Fibonacci'yi Çalıştırma
Kendisine başvuran Fibonacci akışının bir ön ekini zorlayalım.
Her yeni öğe daha önce oluşturulup önbelleğe alınmış öğelerden hesaplanır; böylece daha fazla değer çektikçe bütün yapı verimli kalır.
object Demo extends App {
lazy val fibs: LazyList[Int] =
0 #:: 1 #:: fibs.zip(fibs.tail).map { case (a, b) => a + b }
println(fibs.take(10).toList)
}Diziler için iterate
LazyList.iterate, bir adım işleviyle sonsuz bir dizi üretir. Kuvvetler, geometrik büyüme ve durum makineleri için doğal bir seçimdir.
Burada her öğe, öncekinin üç katı olarak sonsuza kadar devam eder.
object Demo extends App {
val triples = LazyList.iterate(1)(_ * 3)
println(triples.take(6).toList)
}Bir Asal Sayı Eleği
Sonsuz akışlar Eratosthenes Eleği için çok uygundur. Bir asal baş alın, geri kalan sayıların katlarını filter ile ayıklayın ve özyinelemeli olarak devam edin.
filter tembel olduğu için asallar siz tükettikçe birer birer üretilir.
def sieve(s: LazyList[Int]): LazyList[Int] =
s.head #:: sieve(s.tail.filter(_ % s.head != 0))
val primes = sieve(LazyList.from(2))Eleği Çalıştırma
Şimdi bu sonsuz elekten ilk on asal sayıyı çekin.
On asal sayı üretmek için temel sayı akışının yalnızca yeterli kısmı zorlanır; bu, talep odaklı hesaplamayı gösterir.
object Demo extends App {
def sieve(s: LazyList[Int]): LazyList[Int] =
s.head #:: sieve(s.tail.filter(_ % s.head != 0))
val primes = sieve(LazyList.from(2))
println(primes.take(10).toList)
}Her Şeyi Asla Zorlamayın
length gibi tüm diziyi gerektiren yöntemler, sınırsız bir akış üzerinde toList veya durdurma koşulu olmadan foreach, sonsuz bir LazyList'te takılıp kalır.
Önce her zaman take, takeWhile veya find ile sınırlandırın.
// DON'T: LazyList.from(1).toList // hangs forever
val ok = LazyList.from(1).take(3).toListBaşı Tutma Tuzağı
Bir val, sonsuz ve önbelleğe alan bir LazyList'in başını tutarsa ve akışın çok ilerisine kadar tüketim yaparsanız, zorlanan her hücre etkin kalır ve bellek sızıntısına neden olur.
Uzun dolaşımlar için başı bağlamadan bir yöntem üzerinden tüketin veya bir Iterator kullanın.
Sonsuz Akışlar Neden Önemlidir?
Sonsuz akışlar üretimi tüketimden ayırmanızı sağlar. Üretici sonsuz bir kuralı tanımlar; tüketici ne kadarının somutlaştırılacağına karar verir.
Bu, pipeline'lar, benzetimler ve tembel veri kaynakları için güçlü bir işlevsel kalıptır.
Hızlı Kontrol
Sonsuz LazyList'ler konusundaki anlayışınızı sınayın.
Özet
Sonsuz LazyList'ler, kuyruğun talep üzerine üretilmesi sayesinde çalışır: from, iterate, kendine başvuran fibs ve asal sayı eleği sonsuza kadar üretim yapar, ancak yalnızca tükettiğiniz kısmı gerçekleştirir.
Tüm dizi üzerinde çalışan işlemlerden ve başı bellekte tutmaktan kaçının. Sırada, tembel bir şekilde eleman almayı ve süzmeyi öğreneceğiz.
Sıkça Sorulan Sorular
“Sonsuz Akışlar” dersi ücretsiz mi?
Evet — “Sonsuz Akış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 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.
“Sonsuz Akışlar” dersinde ne öğreneceğim?
Sonsuz verileri güvenle modelleyin. 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 3. dersidir.
“Sonsuz Akış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 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.