Miksi efektijärjestelmät ovat tärkeitä
Tehkää sivuvaikutuksista ja virheistä eksplisiittisiä ja koostettavia.
Miksi efektijärjestelmät ovat tärkeitä on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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 TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Miksi efektijärjestelmillä on merkitystä
Efektijärjestelmä tekee sivuvaikutuksista, epäonnistumisista ja riippuvuuksista tyyppijärjestelmässä eksplisiittisiä ja yhdisteltäviä. Piilotettujen poikkeusten ja ympäristöstä saatavan I/O:n sijaan jokainen efekti on arvo, jota voitte välittää, muuntaa ja yhdistää.
Pelkkään async/throw-käyttöön liittyvät ongelmat
Pelkkä async/await-koodi ja throw piilottavat tärkeää tietoa: funktion allekirjoitus ei kerro, mitä virheitä funktio voi heittää tai mitä resursseja se tarvitsee.
async function getUser(id: number): Promise<User> {
// may throw NotFoundError, may throw NetworkError
// needs a database connection from... somewhere
// none of this is in the type
return await db.users.find(id);
}Virheet ovat näkymättömiä
Promise<User> ei kerro mitään epäonnistumistilanteista. Kutsuja ei voi tietää, mitä virheitä pitäisi käsitellä, joten hän joko käsittelee liikaa virheitä tai unohtaa tapaukset kokonaan.
Riippuvuudet ovat implisiittisiä
Yllä oleva funktio riippuu huomaamatta tietokannasta. Riippuvuus haetaan globaalista muuttujasta tai importista, mikä hankaloittaa testaamista ja korvaamista sekä piilottaa todellisen sopimuksen.
Mikä efektin arvo on
Efekti on laskennan kuvaus, ei laskenta itse. Sen rakentaminen ei tee mitään, vaan efekti suoritetaan myöhemmin. Näin efektit ovat puhtaita arvoja, joita voidaan yhdistellä datan tavoin.
import { Effect } from "effect";
// A description: produces number, no errors, no requirements
const program = Effect.succeed(42);
// Nothing has run yet.Eksplisiittiset epäonnistumiset
Efektit sisältävät mahdolliset virheensä tyypissään, joten kääntäjä pakottaa käsittelemään tai välittämään ne tietoisesti eteenpäin.
import { Effect } from "effect";
const risky = Effect.fail(new Error("boom"));
// type encodes that this can fail with ErrorEksplisiittiset riippuvuudet
Efektit seuraavat tyypissään myös tarvitsemiaan palveluita. Laskenta, joka tarvitsee palvelun Database, ilmoittaa sen suoraan, eikä sitä voi suorittaa ennen palvelun tarjoamista.
Yhdisteltävyys
Koska efektit ovat arvoja, yhdistätte niitä operaattoreilla (map, flatMap, zip) aivan kuten taulukoita tai promiseja, mutta virhe- ja riippuvuuskanavat kulkevat automaattisesti mukana.
Viivästetty suoritus
Mitään ei tapahdu, ennen kuin suoritatte efektin nimenomaisesti, esimerkiksi kutsulla Effect.runPromise. Kuvauksen ja suorituksen erottaminen mahdollistaa uudelleenyritykset, keskeytykset ja testaamisen ilman sivuvaikutusten käynnistämistä uudelleen.
import { Effect } from "effect";
const program = Effect.succeed(1);
// Run at the edge of your app:
// const result = await Effect.runPromise(program);Vertailu Promise-tyyppeihin
Promise suoritetaan heti, sen virheitä ei tyypitetä eikä se huomioi riippuvuuksia. Effect on viivästetty, virheiden osalta tyypitetty ja riippuvuudet huomioiva, joten sen sisältämä tieto on aidosti kattavampaa.
Miksi tällä on merkitystä
Kun efektit, virheet ja riippuvuudet tehdään eksplisiittisiksi, kääntäjä valvoo niiden asianmukaista käsittelyä, koodia voidaan testata vaihtamalla riippuvuuksia ja monimutkaiset asynkroniset työnkulut voidaan yhdistää luotettavasti. Tämä on Effect-TS:n kaltaisten kirjastojen taustalla oleva ajatus.
Pikatarkistus
Testatkaa, miten hyvin ymmärrätte efektijärjestelmien merkityksen.
Kertaus
Efektijärjestelmät tekevät sivuvaikutuksista, epäonnistumisista ja riippuvuuksista eksplisiittisiä. Toisin kuin välittömästi suoritettavat, virheistä tietämättömät ja riippuvuudet piilottavat promiset, efekti on laskennan viivästetty ja yhdisteltävä kuvaus, jonka tyyppi sisältää tiedot onnistumisesta, virheistä ja vaatimuksista. Tämä mahdollistaa luotettavan yhdistämisen ja testattavuuden.
Opi TypeScript 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
- 101
- Oppitunnit
- 352
Usein kysytyt kysymykset
Onko oppitunti ”Miksi efektijärjestelmät ovat tärkeitä” ilmainen?
Kyllä – oppitunnin ”Miksi efektijärjestelmät ovat tärkeitä” 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 TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Miksi efektijärjestelmät ovat tärkeitä”?
Tehkää sivuvaikutuksista ja virheistä eksplisiittisiä ja koostettavia. Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript 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 ”Miksi efektijärjestelmät ovat tärkeitä”-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ä TypeScript Academy-oppitunnilla?
Kyllä. Jokainen TypeScript 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
- Miksi efektijärjestelmät ovat tärkeitä
- Effect-tyyppi
- Efektien koostaminen
- Virhekanavat ja riippuvuudet