lazy-ominaisuus
Siirrä muunnostyö tehtäväksi vasta tarvittaessa.
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!) // 2lazy-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 2Lazy 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 LazyMapSequenceLazy-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) // 4Milloin 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!) // 7Pikakysymys
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
.lazypalauttaa 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.
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
- lazy-ominaisuus
- Laiska map ja filter
- Laiskan ja välittömän käsittelyn kompromissit
- Mukautettujen laiskojen sekvenssien rakentaminen