Kotlin Academy · Ders

Tembel İşlemler

Ara listelerden kaçının

3. ders / 413 adım

Tembel İşlemler, CoddyKit'te ücretsiz bir Kotlin 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, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Tembel İşlemler

Dizilerin gücü, tembel işlemlerden gelir. Ara işlemler, çalıştırmadan bir işlem hattı oluşturur; öğeleri bu hattan yalnızca sonlandırma işlemi geçirir. Böylece ara listelerden kaçınılır.

Ara Listeler Yok

Koleksiyonlarda her map ve filter yeni bir liste oluşturur. Dizilerde ise öğeler, bu geçici listeler oluşturulmadan tüm adımlardan akarak ilerler.

fun main() {
    val result = (1..6).asSequence()
        .map { it * it }
        .filter { it % 2 == 0 }
        .toList()
    println(result)
}

Tembelliği Gözlemleme

Sonlandırma işlemi olmadan hiçbir lambda çalışmaz. İşlem hattı, tüketilene kadar yalnızca bir tariften ibarettir.

fun main() {
    val pipeline = (1..3).asSequence()
        .map { println("map $it"); it }
    println("Built pipeline, nothing ran")
    pipeline.toList()
}

take Çalışmayı Sınırlar

take(n) tembel bir ara işlemdir. Sonsuz bir üreticiyle birlikte kullanıldığında, n öğe ürettikten sonra durur.

fun main() {
    val firstThree = generateSequence(1) { it + 1 }
        .map { it * 10 }
        .take(3)
        .toList()
    println(firstThree)
}

first Erken Sonlandırır

first gibi sonlandırma işlemleri ihtiyaç duydukları şeyi bulur bulmaz durur ve kalan öğeleri tamamen atlar.

fun main() {
    val result = (1..1000).asSequence()
        .map { println("processing $it"); it }
        .first { it > 3 }
    println("Found $result")
}

Öğe Öğe Akış

Bir dizide 1. öğe önce map işleminden, ardından filter işleminden geçer; sonra 2. öğe ve diğerleri gelir. Erken sonlandırmayı mümkün kılan ve tüm sonuçları arabelleğe alma gereğini ortadan kaldıran sıralama budur.

fun main() {
    listOf(1, 2, 3, 4).asSequence()
        .filter { println("filter $it"); it % 2 == 0 }
        .map { println("map $it"); it * 10 }
        .toList()
}

takeWhile ve dropWhile

takeWhile, koşul başarısız olana kadar öğeleri üretir; dropWhile ise koşul sağlandığı sürece baştaki öğeleri atlar. Her ikisi de tembeldir.

fun main() {
    val nums = generateSequence(1) { it + 1 }
    println(nums.takeWhile { it < 5 }.toList())
}

Gereksiz Hesaplamalardan Kaçınma

Tüketilene kadar hiçbir şey çalışmadığı ve tüketim erken durdurulabildiği için maliyetli dönüşümler yalnızca sonlandırma işlemine gerçekten ulaşan öğelere uygulanır.

fun main() {
    val result = (1..100).asSequence()
        .map { it * 2 }
        .filter { it > 10 }
        .take(2)
        .toList()
    println(result)
}

Dizileri Yeniden Kullanma

Çoğu dizi birden fazla kez yinelenebilir ve her seferinde işlem hattı yeniden çalıştırılır. Ancak tek kullanımlık kaynaklardan (örneğin bir yineleyiciden) gelen diziler yalnızca bir kez tüketilebilir. Kaynağı dikkate almanız gerekir.

fun main() {
    val seq = sequenceOf(1, 2, 3).map { it * 2 }
    println(seq.toList())
    println(seq.sum())
}

Durum Bilgili ve Durumsuz İşlemler

İşlemlerin çoğu durumsuzdur; her seferinde tek bir öğeyi işler. sorted veya distinct gibi bazı işlemler ise durum bilgisine sahiptir ve tüm öğeleri arabelleğe almalı ya da taramalıdır. Bu da tembellikten sağlanan yararı azaltır.

fun main() {
    val result = sequenceOf(3, 1, 2, 1).distinct().sorted().toList()
    println(result)
}

Tembelliğin Kazandırdıkları

Tembel işlemler, ara listeleri atlayarak bellekten; erken sonlandırma yaparak da zamandan tasarruf sağlar. Veri büyüdükçe ve sonlandırma işlemi daha seçici oldukça yarar da artar.

Kısa Kontrol

Bir dizi zincirindeki lambdalar gerçekte ne zaman çalışır?

Özet

Tembel işlemler, yalnızca bir sonlandırma işlemi onları tükettiğinde çalıştırılan bir işlem hattı oluşturur. Böylece ara listelerden kaçınılır ve first, take ve takeWhile ile erken sonlandırma mümkün olur. sorted gibi durum bilgili işlemlere dikkat edin. Sırada, dizilerin koleksiyonlardan ne zaman daha iyi olduğunu belirleyeceksiniz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Kotlin öğ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
51
Dersler
203

Sıkça Sorulan Sorular

“Tembel İşlemler” dersi ücretsiz mi?

Evet — “Tembel İşlemler” 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 Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Tembel İşlemler” dersinde ne öğreneceğim?

Ara listelerden kaçının Kotlin 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.

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

Önceden deneyim gerekmez. CoddyKit'te Kotlin 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 İşlemler” 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 Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin 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. Diziler Neden Kullanılır
  2. Diziler Oluşturma
  3. Tembel İşlemler
  4. Diziler ve Koleksiyonlar
← Kotlin Academy Sayfasına Dön