0Pricing
Scala for Backend Engineering & Functional Programming · Lezione

Evitare null

Basi di Option

Evitare null è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 1 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.

Il problema di null

In molti linguaggi, un valore mancante è rappresentato da null. Tuttavia, null causa il temuto NullPointerException quando si dimentica di verificarlo.

Scala offre un'alternativa più sicura: il tipo Option.

Che cos'è Option?

Option[A] rappresenta un valore che può essere presente oppure no. Ha esattamente due casi:

  • Some(value) quando esiste un valore
  • None quando non esiste alcun valore

Il tipo stesso indica che un valore potrebbe essere assente.

object Main {
  def main(args: Array[String]): Unit = {
    val present: Option[Int] = Some(42)
    val absent: Option[Int] = None
    println(present)
    println(absent)
  }
}

Creare Some

Racchiuda un valore esistente in Some per indicare che è sicuramente presente.

object Main {
  def main(args: Array[String]): Unit = {
    val name: Option[String] = Some("Ada")
    println(name)
  }
}

Rappresentare l'assenza con None

None è l'unico valore utilizzato quando non è presente nulla. Funziona per qualsiasi tipo Option.

object Main {
  def lookup(found: Boolean): Option[Int] =
    if (found) Some(100) else None
  def main(args: Array[String]): Unit = {
    println(lookup(true))
    println(lookup(false))
  }
}

Funzioni che possono fallire

Restituire Option rende esplicita nella firma del tipo la possibilità di non ottenere alcun risultato. Chi chiama la funzione non può ignorarla.

object Main {
  def findUser(id: Int): Option[String] =
    if (id == 1) Some("Grace") else None
  def main(args: Array[String]): Unit = {
    println(findUser(1))
    println(findUser(2))
  }
}

Verificare con isDefined e isEmpty

isDefined indica se un Option è un Some, mentre isEmpty indica se è None.

object Main {
  def main(args: Array[String]): Unit = {
    val a: Option[Int] = Some(5)
    val b: Option[Int] = None
    println(a.isDefined)
    println(b.isEmpty)
  }
}

Eseguire il pattern matching su un Option

Poiché Option è un ADT sealed, è possibile eseguire il pattern matching su di esso. In questo modo si gestiscono chiaramente sia la presenza sia l'assenza.

object Main {
  def greet(name: Option[String]): String = name match {
    case Some(n) => s"Hello, $n"
    case None    => "Hello, stranger"
  }
  def main(args: Array[String]): Unit = {
    println(greet(Some("Bo")))
    println(greet(None))
  }
}

Creare Option da valori nullable

Se deve lavorare con codice che restituisce null, lo racchiuda in Option(...). Converte null in None e qualsiasi valore reale in Some.

object Main {
  def main(args: Array[String]): Unit = {
    val maybe = Option("data")
    val nothing = Option(null)
    println(maybe)
    println(nothing)
  }
}

La libreria standard restituisce Option

Molti metodi integrati restituiscono già Option invece di rischiare errori. Ad esempio, List.headOption gestisce in sicurezza le liste vuote.

object Main {
  def main(args: Array[String]): Unit = {
    val xs = List(1, 2, 3)
    val empty = List.empty[Int]
    println(xs.headOption)
    println(empty.headOption)
  }
}

Perché preferire Option a null?

Option è preferibile a null perché:

  • Rende visibili i valori mancanti nel tipo
  • Obbliga chi chiama la funzione a gestire il caso di assenza
  • Elimina i NullPointerException
  • Si combina con map, flatMap e le for-comprehension

Mettere insieme i concetti

Una piccola ricerca che restituisce Option, gestita poi in sicurezza con il pattern matching.

object Main {
  val prices = Map("apple" -> 3, "pear" -> 5)
  def priceOf(item: String): Option[Int] = prices.get(item)
  def main(args: Array[String]): Unit = {
    priceOf("apple") match {
      case Some(p) => println(s"costs $p")
      case None    => println("not for sale")
    }
    println(priceOf("banana"))
  }
}

Verifica rapida

Verifichi la Sua comprensione di Option.

Riepilogo

Ha imparato a evitare null con Option:

  • Option[A] è Some(value) oppure None
  • Rende esplicita nel tipo la possibile assenza
  • Verifichi con isDefined/isEmpty o con il pattern matching
  • Utilizzi Option(x) per racchiudere valori nullable
  • Metodi della libreria come headOption e Map.get restituiscono Option

Domande Frequenti

La lezione «Evitare null» è gratuita?

Sì — il testo completo di «Evitare null» è 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 «Evitare null»?

Basi di Option 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 1 di 4.

Quanto tempo richiede la lezione «Evitare null»?

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.

Tutte le lezioni di questo corso

  1. Evitare null
  2. map e flatMap su Option
  3. getOrElse e fold
  4. Option nelle for-comprehension
← Torna a Scala for Backend Engineering & Functional Programming