Swift Academy · Oppitunti

lazy-ominaisuus

Siirrä muunnostyö tehtäväksi vasta tarvittaessa.

Oppitunti 1/413 vaihetta

lazy-ominaisuus on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Oletuksena suoritetaan heti

Vakiokokoelmien metodit ovat välittömiä: map, filter ja muut suoritetaan heti, ja ne muodostavat välittömästi kokonaan uuden taulukon, vaikka lukisit vain ensimmäisen alkion.

Välitön käsittely tapahtuu nyt

Tämä muodostaa koko muunnetun taulukon etukäteen:

let nums = [1, 2, 3, 4, 5]
let doubled = nums.map { $0 * 2 }  // whole array built now
print(doubled.first!)  // 2

lazy-ominaisuus

Jokainen kokoelma tarjoaa .lazy-näkymän. Lazy-näkymän operaatiot ovat viivästettyjä: niitä ei suoriteta, ennen kuin käyt kokoelman läpi tai pyydät tiettyä alkiota.

Lazy-näkymän luominen

Lisää ketjun alkuun vain .lazy:

let nums = [1, 2, 3, 4, 5]
let view = nums.lazy.map { $0 * 2 }
// nothing computed yet
print(Array(view))  // [2, 4, 6, 8, 10]

Viivästetyn suorituksen todistaminen

Sivuvaikutukset osoittavat, että sulkeuma suoritetaan vain tarvittaessa:

let nums = [1, 2, 3]
let lazyMapped = nums.lazy.map { n -> Int in
    print("transforming \(n)")
    return n * 2
}
print("created view")
print(lazyMapped.first!)  // prints "transforming 1" then 2

Lazy palauttaa eri tyypin

Lazy-ketju on kevyt wrapper, ei Array:

let nums = [1, 2, 3]
let view = nums.lazy.map { $0 + 1 }
print(type(of: view).self != [Int].self)  // true -- it is a LazyMapSequence

Lazy-näkymän konkretisointi

Muunna näkymä takaisin konkreettiseksi taulukoksi Array(...)-kutsulla, kun sinun täytyy tallentaa tai palauttaa se:

let nums = [1, 2, 3]
let result: [Int] = Array(nums.lazy.map { $0 * 10 })
print(result)  // [10, 20, 30]

Lazy ja first(where:)

Lazy-laskenta hyödyttää, kun lopetat aikaisin. Vain osumatuloksen löytämiseen tarvittava määrä alkioita käsitellään:

let nums = [1, 2, 3, 4, 5, 6]
let firstBig = nums.lazy.map { $0 * $0 }.first { $0 > 10 }
print(firstBig!)  // 16  (stops at 4*4)

Lazy-näkymä alueella

Alueet toimivat myös lazy-näkymän kanssa, mikä on hyödyllistä suurille tai lähes äärettömille sekvensseille:

let firstThree = (1...1000).lazy.map { $0 * $0 }.prefix(3)
print(Array(firstThree))  // [1, 4, 9]

Näkymän uudelleenarviointi

Lazy-näkymä laskee tuloksen uudelleen joka kerta, kun käyt sen läpi — se ei tallenna tuloksia. Jos käyt sen läpi kahdesti, muunnos suoritetaan kahdesti:

var calls = 0
let view = [1, 2].lazy.map { (n: Int) -> Int in calls += 1; return n }
_ = Array(view)
_ = Array(view)
print(calls)  // 4

Milloin lazy kannattaa ottaa käyttöön

Lisää .lazy, kun ketju on pitkä mutta käytät vain osan tuloksesta — ensimmäisen osuman, etuosan tai yhden reducen. Pienille kokonaan käsiteltäville taulukoille välitön suoritus on yksinkertaisempi.

let nums = Array(1...100)
let result = nums.lazy.filter { $0 % 7 == 0 }.first
print(result!)  // 7

Pikakysymys

Mitä .lazy-ominaisuus muuttaa map- ja filter-funktioiden toiminnassa?

Kertaus

Opit lazy-laskennan perusteet:

  • Vakiokokoelmien metodit suoritetaan heti — ne muodostavat taulukot välittömästi
  • .lazy palauttaa viivästetyn näkymän eli erityisen sekvenssityypin
  • Työ tehdään vasta, kun käyt kokoelman läpi tai pyydät tiettyä alkiota
  • Muodosta konkreettinen tulos Array(...)-kutsulla; näkymät suoritetaan uudelleen jokaisella läpikäynnillä

Seuraavaksi: lazy-map- ja lazy-filter-ketjut.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”lazy-ominaisuus” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “lazy-ominaisuus”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”lazy-ominaisuus”?

Siirrä muunnostyö tehtäväksi vasta tarvittaessa. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”lazy-ominaisuus”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. lazy-ominaisuus
  2. Laiska map ja filter
  3. Laiskan ja välittömän käsittelyn kompromissit
  4. Mukautettujen laiskojen sekvenssien rakentaminen
← Takaisin: Swift Academy