Scala til backendudvikling og funktionel programmering · Lektion

Cats-type classes

Functor, Monad osv.

Lektion 1 af 413 trin

Cats-type classes er en gratis Scala til backendudvikling og funktionel programmering-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Scala til backendudvikling og funktionel programmering, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Scala til backendudvikling og funktionel programmering-kurset indeholder 4 lektioner i alt.

Hvad er typeklasser?

En typeklasse er et mønster til ad hoc-polymorfi. Den lader dig tilføje adfærd til en type uden at ændre den. Cats er et Scala-bibliotek, der leverer et rigt hierarki af typeklasser til funktionel programmering.

  • Functor — ting, du kan bruge map på
  • Applicative — kombinerer uafhængige effekter
  • Monad — sekvenserer afhængige effekter

Functor: map

En Functor[F] stiller map til rådighed. Den transformerer værdien i en kontekst uden at ændre kontekstens struktur.

import cats.Functor
import cats.instances.option._

val f = Functor[Option].map(Some(2))(_ + 1)
println(f) // Some(3)

Functor-love

En lovlig Functor skal overholde to love:

  • Identitet: fa.map(x => x) == fa
  • Sammensætning: fa.map(f).map(g) == fa.map(f.andThen(g))

Disse garantier gør det sikkert at refaktorere kæder af map-kald.

Applicative: pure og ap

Applicative[F] udvider Functor og tilføjer pure (løfter en værdi ind i konteksten) samt muligheden for at kombinere uafhængige værdier med mapN.

import cats.Applicative
import cats.instances.option._

val lifted = Applicative[Option].pure(42)
println(lifted) // Some(42)

Kombinering med mapN

Syntaksen mapN kombinerer flere uafhængige værdier med effekter til én og anvender en funktion, når de alle er til stede.

import cats.syntax.apply._
import cats.instances.option._

val result = (Option(1), Option(2), Option(3)).mapN(_ + _ + _)
println(result) // Some(6)

Monad: flatMap

Monad[F] udvider Applicative og tilføjer flatMap, som sekvenserer afhængige beregninger. Hvert trin kan afhænge af resultatet fra det foregående trin.

import cats.Monad
import cats.instances.option._

val m = Monad[Option].flatMap(Some(3))(x => Some(x * 10))
println(m) // Some(30)

Monad-love

Monader skal overholde tre love:

  • Venstre identitet: pure(a).flatMap(f) == f(a)
  • Højre identitet: m.flatMap(pure) == m
  • Associativitet: indlejrede flatMap-kald kan grupperes på ny

Semigroup og Monoid

En Semigroup[A] definerer combine (associativ). En Monoid[A] tilføjer et neutralt empty-element. De bruges til foldning og akkumulering.

import cats.syntax.semigroup._
import cats.instances.int._
import cats.instances.string._

println(3 |+| 4)       // 7
println("foo" |+| "bar") // foobar

Foldable

Foldable[F] abstraherer foldning over en struktur. Kombineret med Monoid reducerer combineAll en samling til én værdi.

import cats.Foldable
import cats.instances.list._
import cats.instances.int._

val total = Foldable[List].combineAll(List(1, 2, 3, 4))
println(total) // 10

Traverse

Traverse[F] lader dig mappe hvert element til en effekt og samle resultaterne, så List[F[A]] bliver til F[List[A]].

import cats.syntax.traverse._
import cats.instances.list._
import cats.instances.option._

val r = List(1, 2, 3).traverse(x => Option(x * 2))
println(r) // Some(List(2, 4, 6))

Hvorfor typeklasser er vigtige

Typeklasser lader dig skrive kode, der fungerer for enhver type, som leverer den krævede adfærd. En funktion, der er begrænset af Monad[F], fungerer for Option, List, IO og meget mere — skriv én gang, og genbrug den overalt.

import cats.Monad
import cats.syntax.flatMap._
import cats.syntax.functor._

def twice[F[_]: Monad, A](fa: F[A])(f: A => A): F[A] =
  fa.flatMap(a => Monad[F].pure(f(f(a))))

Hurtigt tjek

Hvilken typeklasse tilføjer flatMap til sekvensering af afhængige beregninger?

Opsummering

Du har udforsket det centrale Cats-hierarki af typeklasser:

  • Functor — map
  • Applicative — pure og mapN
  • Monad — flatMap
  • Semigroup/Monoid — combine/empty
  • Foldable/Traverse — foldning og indsamling af effekter

Derefter møder du IO-monaden, som modellerer effekter rent.

Gratis at komme i gang

Lær Scala med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
143

Ofte stillede spørgsmål

Er lektionen “Cats-type classes” gratis?

Ja — hele teksten til “Cats-type classes” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Scala til backendudvikling og funktionel programmering-kurset, skal du opgradere til CoddyKit PRO. Scala til backendudvikling og funktionel programmering-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Cats-type classes”?

Functor, Monad osv. Du øver dig i Scala til backendudvikling og funktionel programmering med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Scala til backendudvikling og funktionel programmering?

Der kræves ingen tidligere erfaring. Scala til backendudvikling og funktionel programmering på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Cats-type classes”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Scala til backendudvikling og funktionel programmering-lektion?

Ja. Alle Scala til backendudvikling og funktionel programmering-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Cats-type classes
  2. IO-monaden
  3. Komposition af IO
  4. Fejlhåndtering i IO
← Tilbage til Scala til backendudvikling og funktionel programmering