0Pricing
TypeScript Academy · Lezione

Tipi Option e Maybe

Modelli esplicitamente la presenza o l’assenza di un valore.

Tipi Option e Maybe è una lezione TypeScript Academy 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 TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.

Rappresentare l'assenza

A volte un valore può semplicemente essere assente, senza che vi sia alcun errore da segnalare. Un Option (chiamato anche Maybe) rappresenta esplicitamente la presenza o l'assenza, come alternativa a null e undefined.

Definire Option

Option è un'unione discriminata con un tag some. Quando some è true è presente un valore; quando è false non c'è nulla.

type Option<T> =
  | { some: true; value: T }
  | { some: false };

Costruttori

Le funzioni di supporto some e none semplificano la creazione dei valori Option, rispecchiando ok/err di Result.

const some = <T>(value: T): Option<T> => ({ some: true, value });
const none: Option<never> = { some: false };

Restituire un Option

Una ricerca che potrebbe non trovare nulla restituisce un Option invece di T | undefined. L'intento di rendere il valore opzionale è esplicito nel tipo.

function find<T>(arr: T[], pred: (x: T) => boolean): Option<T> {
  const hit = arr.find(pred);
  return hit === undefined ? none : some(hit);
}

Restringere il tipo con some

Controlli opt.some per accedere al valore in sicurezza. Il compilatore consente di leggere value solo all'interno del ramo in cui il valore è presente.

const r = find([1, 2, 3], n => n > 1);
if (r.some) console.log(r.value); // 2
else console.log("not found");

Perché non usare semplicemente null?

null e undefined sono facili da dimenticare e si confondono con gli altri tipi. Un Option esplicito impone di gestire il caso di assenza e rende chiaro che si tratta di una scelta intenzionale.

Option a confronto con T | undefined

Entrambi possono rappresentare l'assenza, ma Option è una struttura deliberata e denominata a cui si possono associare funzioni di supporto (map, getOrElse), favorendo una gestione coerente nell'intera codebase.

// undefined is implicit and easy to ignore;
// Option is explicit and self-documenting.

Una funzione di supporto getOrElse

Per trasformare un Option in un valore concreto, fornisca un valore alternativo per il caso di assenza. In questo modo la gestione dell'assenza rimane concentrata in un unico punto evidente.

function getOrElse<T>(o: Option<T>, fallback: T): T {
  return o.some ? o.value : fallback;
}
console.log(getOrElse(none, 0)); // 0

Applicare map a un Option

map trasforma il valore interno solo quando è presente, lasciando invariata l'assenza. Questo consente di concatenare le trasformazioni senza ripetere i controlli.

function mapOpt<T, U>(o: Option<T>, f: (t: T) => U): Option<U> {
  return o.some ? some(f(o.value)) : none;
}
console.log(mapOpt(some(5), n => n * 2)); // { some: true, value: 10 }

Option a confronto con Result

Utilizzi Option quando l'assenza non ha una motivazione (ad esempio una ricerca senza risultati). Utilizzi Result quando il fallimento ha un errore esplicativo. Scelga in base alla necessità di comunicare perché si è verificato il problema.

Comporre gli Option

Poiché Option dispone di map e getOrElse, le catene di passaggi opzionali restano leggibili e l'assenza interrompe automaticamente la catena.

const out = getOrElse(mapOpt(find([1,2], n => n > 1), n => n + 100), -1);
console.log(out); // 102

Verifica rapida

Verifica rapida su questa lezione.

Riepilogo

Option<T> è { some: true; value } oppure { some: false } e rappresenta esplicitamente l'assenza invece di usare null. Lo si costruisce con some/none, si restringe il tipo in base a some e si utilizzano funzioni di supporto come getOrElse e map. Preferisca Option quando l'assenza non richiede una motivazione, e Result quando il fallimento sì.

Domande Frequenti

La lezione «Tipi Option e Maybe» è gratuita?

Sì — il testo completo di «Tipi Option e Maybe» è 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 TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.

Cosa imparerò in «Tipi Option e Maybe»?

Modelli esplicitamente la presenza o l’assenza di un valore. Eserciti TypeScript Academy 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 TypeScript Academy?

Non è richiesta alcuna esperienza precedente. TypeScript Academy 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 «Tipi Option e Maybe»?

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 TypeScript Academy?

Sì. Ogni lezione TypeScript Academy 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. Il problema del lancio degli errori
  2. Modellare i tipi Result
  3. Tipi Option e Maybe
  4. Programmazione orientata alle railway
← Torna a TypeScript Academy