In F # mantra sembra esserci un evitamento viscerale di null
, Nullable<T>
e il suo tipo. In cambio, dovremmo invece usare i tipi di opzioni. Ad essere onesti, non vedo davvero la differenza.Qual è la differenza tra un tipo di opzione e un tipo nullable?
La mia comprensione del tipo # opzione di F è che permette di specificare un tipo che può contenere uno qualsiasi dei suoi valori normali, o
None
. Ad esempio, unOption<int>
consente tutti i valori che unint
può avere, oltre aNone
.La mia comprensione dei tipi Null in C# è che consente di specificare un tipo che può contenere uno qualsiasi dei suoi valori normali, oppure
null
. Ad esempio, unNullable<int>
a.k.aint?
consente tutti i valori che unint
può avere, oltre anull
.
Qual è la differenza? Sostituisci il vocabolario con Nullable
e Option
, null
e None
, e in pratica hai la stessa cosa. Qual è il problema più oltre null
?
Si tratta di evitare gli errori logici il prima possibile - con 'option', si ottiene un warning/errore del compilatore per il mancato controllo di' None'; con 'null' non lo fai. – ildjarn
Quindi, in teoria, se c'era un C# con pattern matching che assicurava che si gestiva il caso 'null', sarebbe stato un lavaggio? –
IMO, praticamente, anche se altri potrebbero obiettare diversamente sulla _semantica_ sensibilità di 'null'. – ildjarn