Swift Academy · Ders

Özel Tembel Diziler Oluşturma

Kendi tembel değerlendirilen dizilerinizi oluşturun.

4. ders / 413 adım

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

Neden Özel Tembel Diziler?

map ve filter ötesinde, sonsuz üreticiler veya isteğe bağlı çalışması gereken maliyetli hesaplanmış akışlar gibi amaçlar için kendi tembel değerlendirilen dizilerinizi oluşturabilirsiniz.

LazySequence Türü

.lazy çağrısı, bir koleksiyonu LazySequenceProtocol ile uyumlu bir türle sarar. Eklediğiniz işlemler daha fazla tembel sarmalayıcı döndürür:

let view = [1, 2, 3].lazy
let mapped = view.map { $0 * 2 }
print(Array(mapped))  // [2, 4, 6]  -- LazyMapSequence

Çekme Tabanlı Dizi

Özel diziler çekme tabanlıdır: yineleyiciye yapılan her çağrı, yalnızca istendiğinde bir sonraki değeri hesaplar. İşte bir Fibonacci üreticisi:

struct Fibonacci: Sequence, IteratorProtocol {
    var a = 0, b = 1
    mutating func next() -> Int? {
        let r = a
        (a, b) = (b, a + b)
        return r
    }
}
print(Array(Fibonacci().prefix(6)))  // [0, 1, 1, 2, 3, 5]

Sonsuz ve Tembel Tüketim

Değerler isteğe bağlı olarak çekildiğinden, sonlu bir dilim aldığınız sürece sonsuz bir dizi güvenlidir:

struct Naturals: Sequence, IteratorProtocol {
    var n = 1
    mutating func next() -> Int? { defer { n += 1 }; return n }
}
print(Array(Naturals().prefix(4)))  // [1, 2, 3, 4]

LazySequenceProtocol ile Uyum Sağlama

LazySequenceProtocol kullanmak, kendi türünüzün map/filter ile de tembel zincirler oluşturmasını sağlar:

struct Counter: Sequence, IteratorProtocol, LazySequenceProtocol {
    var n = 0; let limit: Int
    mutating func next() -> Int? {
        guard n < limit else { return nil }
        defer { n += 1 }
        return n
    }
}
print(Array(Counter(n: 0, limit: 3).map { $0 * 10 }))  // [0, 10, 20]

sequence(first:next:)

Standart kitaplık, yeni bir tür oluşturmadan özel tembel diziler için bir oluşturucu sunar:

let powers = sequence(first: 1) { $0 <= 16 ? $0 * 2 : nil }
print(Array(powers))  // [1, 2, 4, 8, 16, 32]

sequence(state:next:)

Adımlar arasında daha kapsamlı bir durum taşıyın:

let fibs = sequence(state: (0, 1)) { (s: inout (Int, Int)) -> Int? in
    let r = s.0
    s = (s.1, s.0 + s.1)
    return r
}
print(Array(fibs.prefix(6)))  // [0, 1, 1, 2, 3, 5]

AnySequence Sarmalayıcısı

Bir API sunarken somut türü AnySequence arkasında gizleyin:

func evens(upTo n: Int) -> AnySequence<Int> {
    AnySequence((0...n).lazy.filter { $0 % 2 == 0 })
}
print(Array(evens(upTo: 8)))  // [0, 2, 4, 6, 8]

Tembel Hesaplanan Akış

Maliyetli işi her öğe gerçekten tüketilene kadar erteleyin:

let stream = (1...5).lazy.map { (n: Int) -> Int in
    print("computing \(n)")
    return n * n
}
print(stream.first!)  // computing 1, then 1

Üreticiyi Durdurma

Diziyi düzgün biçimde sonlandırmak için next() içinden nil döndürün:

let countdown = sequence(state: 3) { (s: inout Int) -> Int? in
    guard s > 0 else { return nil }
    defer { s -= 1 }
    return s
}
print(Array(countdown))  // [3, 2, 1]

Hepsini Birleştirme

İsteğe bağlı bir işlem hattı oluşturmak için özel bir üreticiyi tembel işleçlerle birleştirin:

let primesIsh = sequence(first: 2) { $0 < 20 ? $0 + 1 : nil }
    .lazy
    .filter { n in (2..<n).allSatisfy { n % $0 != 0 } }
print(Array(primesIsh))  // [2, 3, 5, 7, 11, 13, 17, 19]

Hızlı Kontrol

Özel bir IteratorProtocol dizisinin sonunu ne belirtir?

Özet

Özel tembel dizileri öğrendiniz:

  • .lazy, LazySequenceProtocol sarmalayıcıları üretir
  • Sequence + IteratorProtocol uygulayın; durmak için next() içinden nil döndürün
  • Hızlı oluşturucular olarak sequence(first:next:) / sequence(state:next:) kullanın
  • Somut türleri gizlemek için AnySequence ile sarın

Kurs tamamlandı! Sırada: closures konusuna derinlemesine bakış var.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Swift öğ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
122
Dersler
409

Sıkça Sorulan Sorular

“Özel Tembel Diziler Oluşturma” dersi ücretsiz mi?

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

“Özel Tembel Diziler Oluşturma” dersinde ne öğreneceğim?

Kendi tembel değerlendirilen dizilerinizi oluşturun. Swift 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.

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

Önceden deneyim gerekmez. CoddyKit'te Swift 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.

“Özel Tembel Diziler Oluşturma” 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 Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift 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. lazy Özelliği
  2. Tembel map ve filter
  3. Tembel ve Açgözlü İşlemlerin Dengesi
  4. Özel Tembel Diziler Oluşturma
← Swift Academy Sayfasına Dön