Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin · Oppitunti

IO-monadi

Puhtaat vaikutukset.

Oppitunti 2/413 vaihetta

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 description

Referentiaalinen 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 it

map 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 would

Vertailu 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.delay lykkäävät vaikutuksia
  • IO.pure paketoi lasketut arvot
  • IOApp / IOApp.Simple suorittavat ohjelmia
  • Poikkeukset siepataan eikä niitä heitetä heti

Seuraavaksi: useiden IO-toimintojen koostaminen.

Aloita maksutta

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.

Kaikki tämän kurssin oppitunnit

  1. Catsiä type classit
  2. IO-monadi
  3. IO:n koostaminen
  4. Virheenkäsittely IO:ssa
← Takaisin: Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin