Cats-type classes
Functor, Monad osv.
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 brugemappåApplicative— kombinerer uafhængige effekterMonad— 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") // foobarFoldable
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) // 10Traverse
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—mapApplicative—pureogmapNMonad—flatMapSemigroup/Monoid—combine/emptyFoldable/Traverse— foldning og indsamling af effekter
Derefter møder du IO-monaden, som modellerer effekter rent.
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
- Cats-type classes
- IO-monaden
- Komposition af IO
- Fejlhåndtering i IO