Dart Academy · Oppitunti

Laiskat iteroitavat ja generaattorit sync*:lla

Tuota arvoja tarpeen mukaan

Oppitunti 3/413 vaihetta

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 runs

Miksi 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. 🌟

Aloita maksutta

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

  1. Korkeamman kertaluvun funktiot ja currying
  2. fold, reduce ja expand
  3. Laiskat iteroitavat ja generaattorit sync*:lla
  4. Puhtaiden funktioputkien koostaminen
← Takaisin: Dart Academy