0Pricing
Kotlin Academy · Ders

Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma

Çok adımlı işlem hatları oluşturun ve tembel değerlendirme için Sequence kullanın.

Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma, CoddyKit'te ücretsiz bir Kotlin Academy 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, 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.

Sorun: Ara Listeler

Her koleksiyon işlemi (filtreleme, eşleme vb.) yeni bir liste oluşturur. Büyük koleksiyonlarda veya uzun zincirlerde bu, bellek ve zaman israfına yol açar.

İstekli ve Tembel Değerlendirme

Koleksiyon işlemleri isteklidir: her adım, bir sonraki adıma geçmeden önce listeyi tamamen işler. Dizi işlemleri tembeldir: bir sonraki öğeye geçmeden önce bir öğe tüm adımlardan geçirilir.

Diziye Dönüştürme

İstekli (liste) işlemden tembel (dizi) işleme geçmek için asSequence() çağrısını yapın.
val result = (1..1_000_000)
    .asSequence()
    .filter { it % 2 == 0 }
    .map { it * it }
    .take(5)
    .toList()
println(result)  // [4, 16, 36, 64, 100]

Dizi Tembeldir: Sonlandırıcı İşleme Kadar Çalışmaz

Bir sonlandırıcı işlem (toList, first, sum vb.) çağırılana kadar hiçbir hesaplama yapılmaz.
val seq = generateSequence(1) { it + 1 }  // infinite!
    .filter { it % 3 == 0 }
    .map { it * it }
val first5 = seq.take(5).toList()
println(first5)  // [9, 36, 81, 144, 225]

generateSequence: Sonsuz Diziler

generateSequence tembel sonsuz diziler oluşturur.
val fibonacci = generateSequence(Pair(0, 1)) { (a, b) -> Pair(b, a + b) }
    .map { it.first }
val first10 = fibonacci.take(10).toList()
println(first10)  // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Dizi Oluşturucusu

yield ile kullanılan sequence { } oluşturucusu, özel tembel diziler oluşturur.
val evens = sequence {
    var n = 0
    while (true) {
        yield(n)
        n += 2
    }
}
println(evens.take(5).toList())  // [0, 2, 4, 6, 8]

Dizi Ne Zaman Kullanılmalı

Şu durumlarda Sequence kullanın: koleksiyon büyükse (1000'den fazla öğe), birden çok zincirlenmiş işlem kullanıyorsanız ve/veya sonuçların yalnızca küçük bir alt kümesine ihtiyacınız varsa.

Dizi Ne Zaman NOT Kullanılmamalı

Küçük koleksiyonlarda (100'den az öğe) diziler ek yük oluşturur. İteratör tabanlı mekanizma, kısa zincirlerde daha yavaştır.
// Overkill for small list:
listOf(1, 2, 3).asSequence().map { it * 2 }.toList()
// Just use:
listOf(1, 2, 3).map { it * 2 }

Dizi Sonlandırıcı İşlemleri

Sonlandırıcı işlemler işlemeyi başlatır. Yaygın olanlar şunlardır: toList(), first(), last(), count(), sum(), any(), all(), none().
val s = (1..100).asSequence().filter { it % 7 == 0 }
println(s.first())          // 7
println(s.count())          // 14
println(s.sum())            // 728

Durum Bilgili ve Durumsuz İşlemler

Bazı dizi işlemleri durum bilgili olur (sıralama, tekrarları kaldırma); çıktı üretmeden önce tüm öğeleri görmeleri gerekir. Bu işlemler tembel değerlendirmeyi bozar.
val s = (1..10).asSequence()
    .filter { it > 3 }   // stateless: lazy
    .sorted()            // stateful: must see all elements
    .take(3).toList()
println(s)  // [4, 5, 6]

constrainOnce: Tek Yineleme Güvenliği

Bir dizinin birden çok kez yinelenmesi durumunda hata vermesini sağlamak için constrainOnce() kullanın; akışlar için kullanışlıdır.
val seq = generateSequence(1) { if (it < 5) it + 1 else null }
    .constrainOnce()
val first = seq.toList()   // OK
// val second = seq.toList()  // IllegalStateException!

Hızlı Kontrol

Bir dizi öğeleri işlemeye ne zaman başlar?

Özet

Diziler tembeldir; sonlandırıcı bir işlem çağrılana kadar çalışma yapılmaz. Birden çok zincirlenmiş işlem içeren büyük koleksiyonlarda asSequence() kullanın. generateSequence ve sequence { }, tembel sonsuz akışlar oluşturur. Sonlandırıcı işlemler işlemeyi başlatır.

Sıkça Sorulan Sorular

“Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma” dersi ücretsiz mi?

Evet — “Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma” 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.

“Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma” dersinde ne öğreneceğim?

Çok adımlı işlem hatları oluşturun ve tembel değerlendirme için Sequence kullanı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 4. dersidir.

“Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma” 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. map ve flatMap: Her Öğeyi Dönüştürme
  2. filter, filterNot ve partition
  3. fold, reduce ve runningFold
  4. Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma
← Kotlin Academy Sayfasına Dön