getOrElse e fold
Estrarre i valori
getOrElse e fold è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Estrarre un valore
Prima o poi è necessario estrarre un valore semplice da un Option, fornendo un valore sensato quando è None.
Scala offre estrattori sicuri come getOrElse e fold per questo scopo.
Usare getOrElse
getOrElse restituisce il valore contenuto in un Some oppure un valore predefinito fornito da Lei quando è None.
Restituisce sempre un valore semplice, mai un Option.
object Main {
def main(args: Array[String]): Unit = {
val a: Option[Int] = Some(5)
val b: Option[Int] = None
println(a.getOrElse(0))
println(b.getOrElse(0))
}
}Il valore predefinito è valutato in modo lazy
Il valore predefinito in getOrElse viene valutato solo quando l'Option è None. Pertanto, un valore predefinito costoso non comporta alcun costo quando è presente un valore.
object Main {
def expensiveDefault(): Int = { println("computing default"); 99 }
def main(args: Array[String]): Unit = {
val present: Option[Int] = Some(7)
println(present.getOrElse(expensiveDefault()))
}
}Eviti get
Option dispone di un metodo get, ma questo genera un'eccezione su None. Ciò vanifica lo scopo dell'utilizzo di Option.
Preferisca getOrElse, fold o il pattern matching.
orElse per gli Option alternativi
orElse è diverso: restituisce il primo Option se è un Some; altrimenti restituisce un Option alternativo.
Lo usi per provare alternative che a loro volta potrebbero essere vuote.
object Main {
def main(args: Array[String]): Unit = {
val primary: Option[Int] = None
val backup: Option[Int] = Some(42)
println(primary.orElse(backup))
}
}Introduzione a fold
fold gestisce entrambi i casi con una sola chiamata. Si fornisce prima un valore predefinito per None, poi una funzione per il valore di Some.
Restituisce un unico risultato, trasformando il valore quando è presente.
object Main {
def main(args: Array[String]): Unit = {
val n: Option[Int] = Some(10)
val result = n.fold(0)(x => x * 2)
println(result)
}
}fold su None
Quando l'Option è None, fold restituisce il valore predefinito fornito per primo e ignora la funzione di trasformazione.
object Main {
def main(args: Array[String]): Unit = {
val empty: Option[Int] = None
val result = empty.fold(-1)(x => x * 2)
println(result)
}
}fold verso un tipo diverso
Entrambi i rami di fold devono restituire lo stesso tipo, ma questo tipo può essere diverso dal tipo del valore dell'Option.
Qui trasformiamo un Option[Int] in una String.
object Main {
def describe(o: Option[Int]): String =
o.fold("missing")(x => s"value $x")
def main(args: Array[String]): Unit = {
println(describe(Some(8)))
println(describe(None))
}
}Scegliere tra le alternative
Guida rapida:
getOrElse: fornisce un valore predefinito dello stesso tipoorElse: fornisce un Option alternativofold: trasforma il valore e fornisce un valore predefinito in un unico passaggio- pattern matching: quando ogni caso richiede una logica più articolata
Combinare con map
Un idioma comune consiste nell'usare prima map per trasformare e poi getOrElse per ottenere un valore semplice.
object Main {
def main(args: Array[String]): Unit = {
val name: Option[String] = Some("ada")
val display = name.map(_.toUpperCase).getOrElse("ANON")
println(display)
}
}Mettere tutto insieme
Cercare un valore di configurazione, fornire un Option alternativo e infine ottenere un valore predefinito con getOrElse.
object Main {
val env = Map("timeout" -> "30")
def main(args: Array[String]): Unit = {
val timeout = env.get("timeout")
.flatMap(_.toIntOption)
.getOrElse(60)
println(timeout)
val retries = env.get("retries").fold(3)(_.toInt)
println(retries)
}
}Verifica rapida
Verifichi la Sua comprensione dell'estrazione dei valori dagli Option.
Riepilogo
Ha imparato a estrarre i valori dagli Option in modo sicuro:
getOrElse(default)restituisce il valore o un valore predefinito (valutato in modo lazy)orElse(fallback)restituisce il primo Some o un Option alternativofold(default)(f)trasforma un Some e usa il valore predefinito per un None in un unico passaggio- Eviti
get, che genera un'eccezione su None
Impara Scala con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 39
- Lezioni
- 143
Domande Frequenti
La lezione «getOrElse e fold» è gratuita?
Sì — il testo completo di «getOrElse e fold» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Cosa imparerò in «getOrElse e fold»?
Estrarre i valori Eserciti Scala for Backend Engineering & Functional Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Scala for Backend Engineering & Functional Programming?
Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «getOrElse e fold»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Scala for Backend Engineering & Functional Programming?
Sì. Ogni lezione Scala for Backend Engineering & Functional Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.