Laiskat iteroitavat ja generaattorit sync*:lla
Tuota arvoja tarpeen mukaan
Laiskat iteroitavat ja generaattorit sync*:lla on ilmainen Dart Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Dart Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Dart Academy-kurssilla on yhteensä 4 oppituntia.
Mitä laiska tarkoittaa
Laiska iteroitava kokoelma ei laske arvojaan ennen kuin niitä todella pyydetään. Työ tehdään tarpeen mukaan, ei kaikkea kerralla. 🦥
Iterable-kokoelmat ovat laiskoja
mapin ja wheren kaltaiset metodit palauttavat laiskan Iterable-kokoelman. Mikään ei suoriteta ennen kuin iteroitte kokoelman tai kutsutte toListia.
var it = [1, 2, 3].map((n) {
print('seen $n');
return n * 2;
});Mitään ei suoriteta vielä
Ennen kuin käytätte iteroitavan kokoelman arvot, mapin runko ei suoritu lainkaan. Laiskuus mahdollistaa työn kuvaamisen ja kustannuksen siirtämisen myöhemmäksi.
for (var x in it) print(x); // now it runsMiksi laiskuus auttaa
Laiskuus säästää työtä, kun tarvitsette vain muutaman tuloksen. Yhdistämällä siihen take-metodin voitte lopettaa aikaisin ja ohittaa loput.
var first2 = it.take(2).toList();Tutustutaan sync*-generaattoreihin
sync*-funktio on generaattori, joka rakentaa laiskan Iterable-kokoelman. Se tuottaa arvoja yksi kerrallaan sitä mukaa kuin niitä pyydetään.
Iterable<int> count(int n) sync* {
for (var i = 1; i <= n; i++) yield i;
}yield-avainsana
Generaattorin sisällä yield palauttaa yhden arvon kutsujalle ja keskeyttää suorituksen, kunnes seuraavaa arvoa tarvitaan.
print(count(3).toList()); // [1, 2, 3]Äärettömät jonot
Koska arvot ovat laiskoja, generaattori voi kuvata turvallisesti äärettömän jonon, kunhan otatte siitä vain äärellisen osan.
Iterable<int> naturals() sync* {
var i = 0;
while (true) yield ++i;
}Äärellisen osan ottaminen
Yhdistäkää ääretön generaattori take-metodiin ja poimikaa vain tarvitsemanne arvot. Silmukka pysähtyy heti, kun pyydetty osa on täynnä.
print(naturals().take(5).toList()); // [1, 2, 3, 4, 5]yield* delegoi
Käyttäkää yield*-merkintää tuottaaksenne kaikki toisen iteroitavan kokoelman tai generaattorin arvot. Se litistää yhden jonon osaksi nykyistä jonoa.
Iterable<int> both() sync* {
yield* count(2);
yield* count(2);
}Generaattorit ja listojen rakentaminen
Generaattori välttää kokonaisen listan rakentamisen muistiin. Arvot käsitellään virtana, joten suuret tai päättymättömät jonot pysyvät muistinkäytöltään kevyinä.
sync* vai async*
Käyttäkää sync*-merkintää synkronisiin laiskoihin iteroitaviin kokoelmiin. Sen asynkroninen vastine async* tuottaa Streamin asynkronisia tapahtumajonoja varten.
Pikatarkistus
Testatkaa, miten hyvin ymmärrätte generaattoreita.
Kertaus
Iterable-kokoelmat ovat laiskoja, ja sync*-generaattorit tuottavat arvoja tarpeen mukaan. Näin voitte kuvata jopa äärettömiä jonoja pienellä kustannuksella. 🌟
Opi Dart 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
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Laiskat iteroitavat ja generaattorit sync*:lla” ilmainen?
Kyllä – oppitunnin ”Laiskat iteroitavat ja generaattorit sync*:lla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Dart Academy-kurssin, päivitä CoddyKit PROhon. Dart Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Laiskat iteroitavat ja generaattorit sync*:lla”?
Tuota arvoja tarpeen mukaan Harjoittelet Dart Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Dart Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Dart Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Laiskat iteroitavat ja generaattorit sync*:lla”-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ä Dart Academy-oppitunnilla?
Kyllä. Jokainen Dart 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
- Korkeamman kertaluvun funktiot ja currying
- fold, reduce ja expand
- Laiskat iteroitavat ja generaattorit sync*:lla
- Puhtaiden funktioputkien koostaminen