map og flatMap på Option
Sammensæt sikkert
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:
maptransformerer værdien i enSome, mensNoneforbliver uændretflatMapanvender en funktion, der returnerer en Option, og flader resultatet ud- Kædning stopper ved
None, hvis et trin erNone - Brug
flatMaptil trin, der returnerer en Option, ogmaptil almindelige trin
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
- Undgå null
- map og flatMap på Option
- getOrElse og fold
- Option i for-comprehensions