IO-monadi
Puhtaat vaikutukset.
IO-monadi on ilmainen Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppitunti CoddyKitissä. Tämä on oppitunti 2/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 Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssilla on yhteensä 4 oppituntia.
Mikä IO on
Cats Effectin IO[A] on kuvaus laskutoimituksesta, joka suoritettuna voi tehdä sivuvaikutuksia ja tuottaa tyypin A arvon. Se on puhdas arvo — mitään ei tapahdu, ennen kuin suoritatte sen.
Sivuvaikutusten lykkääminen
Paketoikaa sivuvaikutus käyttämällä IO(...)- tai IO.delay(...)-kutsua. Runkoa ei suoriteta, kun IO luodaan — vasta, kun se suoritetaan.
import cats.effect.IO
val program: IO[Unit] = IO(println("Hello, IO!"))
// Nothing printed yet — program is just a descriptionReferentiaalinen läpinäkyvyys
Koska IO on laiska, voitte korvata IO-arvon sen määritelmällä muuttamatta ohjelman toimintaa. Tämä referentiaalinen läpinäkyvyys helpottaa vaikutuksellisen koodin päättelyä ja uudelleenjärjestelyä.
Puhtaat arvot
Käyttäkää IO.pure-funktiota jo lasketun arvon nostamiseen. Älkää sijoittako sivuvaikutuksia pure-funktion sisään — se arvioi argumenttinsa heti. Käyttäkää vaikutuksiin IO.delay- tai IO(...)-kutsua.
import cats.effect.IO
val p: IO[Int] = IO.pure(42)
// 42 is computed already; pure just wraps itmap ja as
map muuntaa IO-arvon tuloksen. as korvaa sen vakioarvolla. Kumpikaan ei suorita vaikutusta — ne rakentavat suuremman kuvauksen.
import cats.effect.IO
val len: IO[Int] = IO("hello").map(_.length)
val done: IO[String] = IO(println("ran")).as("done")Suorittaminen IOApp-sovelluksella
Suorittaaksenne IO-ohjelman laajentakaa IOApp-tyyppiä ja toteuttakaa run, joka palauttaa arvon IO[ExitCode]. Ajoympäristö arvioi sen kuitupohjaisella ajoittimella.
import cats.effect.{IO, IOApp, ExitCode}
object Main extends IOApp {
def run(args: List[String]): IO[ExitCode] =
IO(println("Running!")).as(ExitCode.Success)
}IOApp.Simple
Jos ohjelma ei tarvitse argumentteja tai mukautettuja poistumiskoodeja, laajentakaa IOApp.Simple-tyyppiä ja määritelkää run: IO[Unit].
import cats.effect.{IO, IOApp}
object Hello extends IOApp.Simple {
def run: IO[Unit] = IO.println("Hello, world!")
}IO.println
Cats Effect tarjoaa IO.println-funktion kätevään vaikutukselliseen tulostamiseen. Se palauttaa arvon IO[Unit] ja tulostaa vasta suoritettaessa.
import cats.effect.IO
val greet: IO[Unit] = IO.println("effectful output")Poikkeusten sieppaaminen
Jos paketoitu vaikutus heittää poikkeuksen, virhe siepataan IO-arvon sisään sen sijaan, että se pääsisi leviämään. IO-arvosta tulee epäonnistunut arvo, jota voitte käsitellä myöhemmin.
import cats.effect.IO
val boom: IO[Int] = IO(throw new RuntimeException("fail"))
// Creating boom does NOT throw; running it wouldVertailu tavalliseen Scalaan
Ilman vaikutustyyppiä sivuvaikutukset suoritetaan heti, ja niitä on vaikea koostaa. IO lykkää niitä, joten itsenäinen Scala-ohjelma tulostaa heti, kun taas IO-ohjelma lykkää tulostusta.
object Main {
def main(args: Array[String]): Unit = {
val eager = println("runs now") // executed immediately
println("second line")
}
}Miksi IO:ta käytetään
IO tarjoaa seuraavat ominaisuudet:
- Puhtaus — vaikutukset ovat arvoja
- Koostettavuus — ohjelmia voidaan rakentaa pienistä osista
- Turvallisuus — virheitä ja resursseja seurataan
- Samanaikaisuus — kevyet kuidut
Pikatarkistus
Milloin vaikutus lausekkeen IO(println("hi")) sisällä suoritetaan?
Kertaus
IO-monadi mallintaa vaikutukset puhtaina, laiskoina arvoina:
IO(...)/IO.delaylykkäävät vaikutuksiaIO.purepaketoi lasketut arvotIOApp/IOApp.Simplesuorittavat ohjelmia- Poikkeukset siepataan eikä niitä heitetä heti
Seuraavaksi: useiden IO-toimintojen koostaminen.
Opi Scala 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
- 39
- Oppitunnit
- 143
Usein kysytyt kysymykset
Onko oppitunti ”IO-monadi” ilmainen?
Kyllä – oppitunnin ”IO-monadi” 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 Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssin, päivitä CoddyKit PROhon. Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”IO-monadi”?
Puhtaat vaikutukset. Harjoittelet Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”IO-monadi”-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ä Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppitunnilla?
Kyllä. Jokainen Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-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.