Scala til backendudvikling og funktionel programmering · Lektion

map og flatMap på Option

Sammensæt sikkert

Lektion 2 af 413 trin

map og flatMap på Option er en gratis Scala til backendudvikling og funktionel programmering-lektion på CoddyKit. Dette er lektion 2 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.

Transformation af en Option

Ofte har du en Option og vil transformere værdien hvis den er til stede, uden at ændre None.

Metoden map gør netop dette uden manuel udpakning.

Brug af map

map anvender en funktion på værdien i en Some og returnerer en ny Some. På None gør den ingenting og returnerer None.

object Main {
  def main(args: Array[String]): Unit = {
    val n: Option[Int] = Some(10)
    val doubled = n.map(x => x * 2)
    println(doubled)
  }
}

map på None

Når Option er None, springer map helt over funktionen og forbliver None.

Det er den centrale sikkerhedsegenskab: Transformationer gør ingenting ved fravær.

object Main {
  def main(args: Array[String]): Unit = {
    val empty: Option[Int] = None
    val result = empty.map(x => x * 2)
    println(result)
  }
}

Ændring af typen

map kan transformere til en anden type, ligesom på samlinger. Her bliver en Option[Int] til en Option[String].

object Main {
  def main(args: Array[String]): Unit = {
    val n: Option[Int] = Some(7)
    val label = n.map(x => s"value=$x")
    println(label)
  }
}

Problemet med indlejring

Hvad nu, hvis din funktion selv returnerer en Option? Hvis du bruger map, får du en indlejret Option[Option[A]], hvilket er upraktisk.

Det er her, flatMap kommer ind.

object Main {
  def half(x: Int): Option[Int] = if (x % 2 == 0) Some(x / 2) else None
  def main(args: Array[String]): Unit = {
    val n: Option[Int] = Some(8)
    val nested = n.map(half)
    println(nested)
  }
}

Brug af flatMap

flatMap anvender en funktion, der returnerer en Option, og flader resultatet ud til en enkelt Option.

Sammenlign dette output med den indlejrede version fra den forrige scene.

object Main {
  def half(x: Int): Option[Int] = if (x % 2 == 0) Some(x / 2) else None
  def main(args: Array[String]): Unit = {
    val n: Option[Int] = Some(8)
    val flat = n.flatMap(half)
    println(flat)
  }
}

Kædning af flatMap

Fordi hvert trin returnerer en Option, kan du kæde flere kald til flatMap. Hvis et trin giver None, bliver hele kæden til None.

object Main {
  def half(x: Int): Option[Int] = if (x % 2 == 0) Some(x / 2) else None
  def main(args: Array[String]): Unit = {
    val result = Some(16).flatMap(half).flatMap(half)
    println(result)
  }
}

Kortslutning ved None

Hvis et mellemtrin returnerer None, springes de senere trin over, og det endelige resultat er None.

Denne automatiske kortslutning fjerner manuelle null-kontroller.

object Main {
  def half(x: Int): Option[Int] = if (x % 2 == 0) Some(x / 2) else None
  def main(args: Array[String]): Unit = {
    val result = Some(8).flatMap(half).flatMap(half)
    println(result)
  }
}

Kombination af map og flatMap

Brug flatMap til trin, der returnerer en Option, og map til den afsluttende almindelige transformation.

object Main {
  def parse(s: String): Option[Int] = s.toIntOption
  def main(args: Array[String]): Unit = {
    val result = Some("21").flatMap(parse).map(_ * 2)
    println(result)
  }
}

Hvorfor map og flatMap?

Disse metoder lader dig:

  • Transformere værdier uden at pakke dem ud
  • Automatisk springe arbejde over ved None
  • Kæde operationer, der kan mislykkes
  • Undgå indlejret Option[Option[A]] med flatten

Sæt det hele sammen

En realistisk kæde: slå en nøgle op, fortolk den, og transformér den derefter – alt sammen sikkert.

object Main {
  val config = Map("port" -> "8080")
  def main(args: Array[String]): Unit = {
    val port = config.get("port").flatMap(_.toIntOption).map(_ + 1)
    println(port)
    val missing = config.get("host").flatMap(_.toIntOption)
    println(missing)
  }
}

Hurtigt tjek

Test din forståelse af map og flatMap.

Opsummering

Du har lært at sammensætte Options:

  • map transformerer værdien i en Some, mens None forbliver uændret
  • flatMap anvender en funktion, der returnerer en Option, og flader resultatet ud
  • Kædning stopper ved None, hvis et trin er None
  • Brug flatMap til trin, der returnerer en Option, og map til almindelige trin
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 “map og flatMap på Option” gratis?

Ja — hele teksten til “map og flatMap på Option” 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 “map og flatMap på Option”?

Sammensæt sikkert 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 2 af 4.

Hvor lang tid tager lektionen “map og flatMap på Option”?

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. Undgå null
  2. map og flatMap på Option
  3. getOrElse og fold
  4. Option i for-comprehensions
← Tilbage til Scala til backendudvikling og funktionel programmering