Scala for backendutvikling og funksjonell programmering · leksjon

IO-monaden

Rene effekter

Leksjon 2 av 413 trinn

IO-monaden er en gratis leksjon i Scala for backendutvikling og funksjonell programmering på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Scala for backendutvikling og funksjonell programmering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.

Hva er IO?

IO[A] fra Cats Effect er en beskrivelse av en beregning som kan utføre sideeffekter og produsere en verdi av typen A når den kjøres. Den er en ren verdi — ingenting skjer før De kjører den.

Utsette sideeffekter

Pakk inn en sideeffekt med IO(...) eller IO.delay(...). Koden i blokken blir ikke kjørt når IO opprettes — bare når den kjøres.

import cats.effect.IO

val program: IO[Unit] = IO(println("Hello, IO!"))
// Nothing printed yet — program is just a description

Referensiell transparens

Fordi IO er lat, kan De erstatte en IO-verdi med definisjonen dens uten å endre oppførselen. Denne referensielle transparensen gjør effektfull kode enklere å forstå og refaktorere.

Rene verdier

Bruk IO.pure til å løfte en allerede beregnet verdi. Ikke legg sideeffekter i pure — den evalueres ivrig. Bruk IO.delay eller IO(...) for effekter.

import cats.effect.IO

val p: IO[Int] = IO.pure(42)
// 42 is computed already; pure just wraps it

map og as

map transformerer resultatet av en IO. as erstatter det med en konstant. Ingen av dem kjører effekten — de bygger bare en større beskrivelse.

import cats.effect.IO

val len: IO[Int] = IO("hello").map(_.length)
val done: IO[String] = IO(println("ran")).as("done")

Kjøre med IOApp

For å kjøre et IO-program utvider De IOApp og implementerer run, som returnerer en IO[ExitCode]. Kjøretidsmiljøet evaluerer det på en fiberbasert planlegger.

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

For programmer uten argumenter eller egendefinerte avslutningskoder kan De utvide IOApp.Simple og angi en 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 tilbyr IO.println som en praktisk effektfull utskrift. Den returnerer IO[Unit] og skriver bare ut når den kjøres.

import cats.effect.IO

val greet: IO[Unit] = IO.println("effectful output")

Fange unntak

Hvis den innpakkede effekten kaster et unntak, fanges feilen opp inne i IO i stedet for å slippe ut. IO blir en feilet verdi som De kan håndtere senere.

import cats.effect.IO

val boom: IO[Int] = IO(throw new RuntimeException("fail"))
// Creating boom does NOT throw; running it would

Sammenligning med vanlig Scala

Uten en effekttype kjøres sideeffekter umiddelbart og er vanskelige å komponere. IO utsetter dem, slik at et selvstendig Scala-program skriver ut ivrig, mens IO ville utsatt utskriften.

object Main {
  def main(args: Array[String]): Unit = {
    val eager = println("runs now") // executed immediately
    println("second line")
  }
}

Hvorfor bruke IO?

IO gir Dem:

  • Renhet — effekter er verdier
  • Komponerbarhet — bygg programmer av små deler
  • Sikkerhet — feil og ressurser spores
  • Samtidighet — lette fibrer

Kort kontrollspørsmål

Når kjører sideeffekten inne i IO(println("hi")) faktisk?

Oppsummering

IO-monaden modellerer effekter som rene, late verdier:

  • IO(...) / IO.delay utsetter effekter
  • IO.pure pakker inn beregnede verdier
  • IOApp / IOApp.Simple kjører programmer
  • Unntak fanges opp i stedet for å bli kastet ivrig

Deretter skal De komponere flere IO-handlinger sammen.

Gratis å komme i gang

Lær deg Scala med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
39
Leksjoner
143

Ofte stilte spørsmål

Er leksjonen «IO-monaden» gratis?

Ja – hele teksten i «IO-monaden» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Scala for backendutvikling og funksjonell programmering-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.

Hva lærer jeg i «IO-monaden»?

Rene effekter Du øver på Scala for backendutvikling og funksjonell programmering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Scala for backendutvikling og funksjonell programmering?

Ingen tidligere erfaring er nødvendig. Scala for backendutvikling og funksjonell programmering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «IO-monaden»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Scala for backendutvikling og funksjonell programmering-leksjonen?

Ja. Alle Scala for backendutvikling og funksjonell programmering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Cats-typeklasser
  2. IO-monaden
  3. Komponere IO
  4. Feilhåndtering i IO
← Tilbake til Scala for backendutvikling og funksjonell programmering