0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Tembelliği Açıklama

Değerleri yalnızca gerektiğinde hesaplayın.

Tembelliği Açıklama, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 1. 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.

Tembellik Nedir?

Scala'da çoğu değer katıdır: onları tanımladığınız anda hesaplanırlar. Tembellik bunu tersine çevirir. Tembel bir değer yalnızca ilk kez gerektiğinde hesaplanır; bundan önce asla hesaplanmaz.

Bu, hesaplamalar pahalı olduğunda, başarısız olabildiğinde veya hiç kullanılmayabildiğinde önemlidir. Kimsenin istemediği bir iş için neden ödeme yapasınız?

Katı val

Normal bir val, bir daha okumasanız bile sağ tarafını hemen değerlendirir.

Bunu çalıştırın ve "hesaplanıyor" ifadesinin "sonra" ifadesinden önce yazdırıldığına dikkat edin. İş, tanımlama anında gerçekleşir.

object Demo extends App {
  val x = { println("computing"); 42 }
  println("after")
  println(x)
}

lazy val

Bir val ifadesinin önüne lazy eklediğinizde değerlendirme ilk erişime kadar ertelenir.

Burada önce "sonra" yazdırılır, ardından x okunduğunda "hesaplanıyor" yazdırılır. Sonuç ayrıca önbelleğe alınır: gövde en fazla bir kez çalışır.

object Demo extends App {
  lazy val x = { println("computing"); 42 }
  println("after")
  println(x)
  println(x)
}

İsimle Geçilen Parametreler

=> A olarak bildirilen bir parametre isimle geçirilir: bağımsız değişken, yöntem içinde kullanılana kadar değerlendirilmez.

Bu, tembelliğin temel yapı taşıdır. LazyList, kuyruğun istenene kadar hesaplanmaması için isimle geçilen parametreleri kullanır.

def maybe(cond: Boolean, value: => Int): Int =
  if (cond) value else 0

val r = maybe(false, { println("side"); 99 })
// "side" never prints; value was unused

LazyList ile Tanışın

LazyList, Scala'nın tembel dizisidir (2.13 ve sonraki sürümlerde eski Stream'in yerini almıştır). Başı istekli olarak değerlendirilir, ancak kuyruğu tembeldir.

Öğeler ihtiyaç oldukça üretilir ve hesaplandıktan sonra önbelleğe alınır; böylece aynı hücreyi iki kez yeniden hesaplamazsınız.

val ll = LazyList(1, 2, 3)
println(ll)
// prints LazyList(<not computed>) until forced

Değerlendirmeyi Zorlama

Bir LazyList, siz değerlendirmeye zorlayana kadar değerlendirilmeme durumunda kalır. toList veya foreach çağırmak ya da her öğeyi yazdırmak hücreleri değerlendirilmeye zorlar.

REPL, tembel kuyruk için <not computed> gösterir. Zorlamak gerçek değerleri ortaya çıkarır.

object Demo extends App {
  val ll = LazyList(1, 2, 3)
  println(ll.toList)
}

#:: İşleci

Bir LazyList'in önüne #:: ile öğe eklersiniz. Listenin :: işleçlerinden farklı olarak #:: işleçinin sağ tarafı isimle geçirilir; bu nedenle kuyruk gerekene kadar oluşturulmaz.

Bu, devamı tembel olarak hesaplanan dizileri tanımlamanızı sağlar.

val ll = 1 #:: 2 #:: 3 #:: LazyList.empty
println(ll.head)

Önbelleğe Alma

Bir LazyList hücresi hesaplandıktan sonra değeri saklanır. Hücreyi yeniden okumak ücretsizdir ve üreten ifade ikinci kez çalışmaz.

Bunu çalıştırın: "hesap" ifadesi yalnızca zorlanan her öğeye ilk erişimde yazdırılır, tekrarlanan okumalarda yazdırılmaz.

object Demo extends App {
  val ll = LazyList(1, 2).map { n =>
    println("calc " + n); n * 10
  }
  println(ll.head)
  println(ll.head)
}

Tembel Kuyruk İş Başında

Kuyruk tembel olduğu için bir LazyList üzerinde map uygulayabilir ve yalnızca eriştiğiniz öğelerin hesaplanmasını sağlayabilirsiniz.

Burada liste üç öğe içerse de yalnızca baş zorlandığı için "map" yalnızca bir kez yazdırılır.

object Demo extends App {
  val r = LazyList(1, 2, 3).map { n =>
    println("map " + n); n + 1
  }
  println(r.head)
}

Tembellik Neden Yararlıdır?

Tembellik üç şeyi mümkün kılar: kullanılmayan işlerden kaçınmak, sonsuz diziler oluşturmak ve bir hesaplamayı nasıl tanımladığınız ile ne kadarının çalıştırıldığı arasındaki bağı ayırmak.

pipeline'ın tamamını bir kez yazarsınız; tüketici kaç öğe çekeceğine karar verir.

Bir Uyarı

Tembelliğin maliyetleri vardır. LazyList önbelleğe alma yaptığı için başına bir başvuru tutmak, zorlanmış her öğeyi bellekte tutar. Çok büyük veya sonsuz veriler için başa yapılan başvuruyu saklamaktan kaçının.

Ayrıca tembel koddaki yan etkiler beklenmedik zamanlarda çalışabilir ve hata ayıklamayı zorlaştırabilir.

Hızlı Kontrol

Tembel değerlendirme konusundaki anlayışınızı sınayın.

Özet

Katı değerlendirme işi hemen çalıştırır; tembel değerlendirme ise iş gerektiği zamana kadar erteler. lazy val ve isimle geçilen parametreler (=> A) temel yapı taşlarıdır.

LazyList bunların üzerine kuruludur: istekli baş, tembel ve önbelleğe alınan kuyruk; toList veya öğeye erişim yoluyla zorlanır. Sırada LazyList'leri elle oluşturacağız.

Sıkça Sorulan Sorular

“Tembelliği Açıklama” dersi ücretsiz mi?

Evet — “Tembelliği Açıklama” 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.

“Tembelliği Açıklama” dersinde ne öğreneceğim?

Değerleri yalnızca gerektiğinde hesaplayın. 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 1. dersidir.

“Tembelliği Açıklama” 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