Ho letto della (non) comodità di avere null
invece (per esempio) Maybe
. Dopo aver letto questo articolo , sono convinto che sarebbe molto meglio usareMaybe
(o qualcosa di simile). Tuttavia, sono sorpreso di vedere che tutti i linguaggi di programmazione imperativi o orientati agli oggetti "ben noti" continuano a essere utilizzati null
(il che consente l'accesso non controllato a tipi che possono rappresentare un valore "nulla") e che Maybe
viene utilizzato principalmente 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 supporre 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 "annullabili" e quali no? Ciò ci risparmierebbe molto impegno durante il debug e la ricerca di una "NullReferenceException". Immagina che, per impostazione predefinita, nessun tipo possa contenere un riferimento null . Invece, dichiareresti esplicitamente che una variabile può contenere un riferimento null , solo se ne hai davvero bisogno. Questa è l'idea dietro forse. Se hai una funzione che in alcuni casi fallisce (ad esempio divisione per zero), potresti restituire aMaybe<int>
, affermando esplicitamente che il risultato può essere un int, ma anche nulla! Questo è uno dei motivi per preferire Forse anziché null. Se sei interessato a più esempi, ti suggerisco di leggere questo articolo .
I fatti sono che, nonostante gli svantaggi di rendere la maggior parte dei tipi nulli per impostazione predefinita, la maggior parte dei linguaggi di programmazione OO lo fanno effettivamente. Ecco perché mi chiedo:
- Che tipo di argomenti dovresti implementare
null
nel tuo linguaggio di programmazione anzichéMaybe
? Ci sono ragioni o è solo "bagaglio storico"?
Assicurati di aver compreso la differenza tra null e Forse prima di rispondere a questa domanda.
null
suo concetto non esiste (IIRC Haskell ne è un esempio).
null
per molto tempo. Non è facile lasciar perdere.