Ho letto della (non) comodità di avere null
invece di (per esempio) Maybe
. Dopo aver letto questo articolo Sono convinto che sarebbe molto meglio usare Maybe
(o qualcosa di simile). Tuttavia, sono sorpreso nel vedere che tutti i linguaggi di programmazione "ben noti" imperativi o orientati agli oggetti utilizzano ancora null
(che consente l'accesso non controllato ai tipi che possono rappresentare un valore "nulla") e che Maybe
è principalmente usato nei linguaggi di programmazione funzionale.
Ad esempio, guarda il seguente codice C #:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Qualcosa ha un cattivo odore qui ... Perché dovremmo controllare se l'argomento è nullo? Non dovremmo assumere che ogni variabile contenga un riferimento a un oggetto? Come puoi vedere, il problema è che, per definizione, quasi tutte le variabili possono contenere un riferimento null. E se potessimo decidere quali variabili sono "nullable" e quali no? Ciò ci farebbe risparmiare un sacco di sforzi durante il debugging e alla ricerca di una "NullReferenceException". Immagina che, per impostazione predefinita, nessun tipo possa contenere un riferimento null . Invece, dovresti dichiarare esplicitamente che una variabile può contenere un riferimento null , solo se ne hai davvero bisogno. Questa è l'idea alla base di Maybe. Se hai una funzione che in alcuni casi fallisce (ad esempio una divisione per zero), puoi restituire un Maybe<int>
, dichiarando esplicitamente che il risultato potrebbe essere un int, ma anche nulla! Questo è un motivo per preferire Forse anziché null. Se sei interessato ad altri esempi, ti suggerisco di leggere questo articolo .
I fatti sono che, nonostante gli svantaggi di rendere la maggior parte dei tipi nullable per impostazione predefinita, la maggior parte dei linguaggi di programmazione OO lo fanno effettivamente. Ecco perché mi chiedo:
-
Che tipo di argomenti avresti per implementare
null
nel tuo linguaggio di programmazione anzichéMaybe
? Ci sono dei motivi o è solo un "bagaglio storico"?
Assicurati di comprendere la differenza tra null e Maybe prima di rispondere a questa domanda.