Da quando ha impiegato Java un decennio per passare dall'avere tutto il necessario per supportarlo in modo pulito (ad esempio da Java 5) per aggiungerlo; C # ancora non l'ha aggiunto alla libreria standard sebbene sia in grado di circa il tempo necessario; e l'idea è stata di uso comune nei linguaggi funzionali (tipizzati staticamente) poiché, almeno, gli anni '70, direi che JavaScript è più rappresentativo della tendenza.
In effetti, le lingue digitate dinamicamente tendono a essere peggio di questo. Il concetto è sicuramente utile in linguaggi tipizzati dinamicamente ed è facile da implementare, ma pochi lo hanno nelle librerie "standard". Uno dei motivi è che alcuni dei vantaggi sono persi in un linguaggio digitato in modo dinamico. In un linguaggio tipizzato staticamente, l'uso di un tipo Optional
mi costringerà a gestire il caso "niente", non in un linguaggio tipizzato dinamicamente.
Un altro aspetto che è un doppio smacco è la comune pertinenza della nozione di "verità" valori. Da un lato, rende significativamente più semplice interpretare in modo non corretto il comportamento quando si utilizza qualcosa come Optional
. D'altra parte, certi modelli che Optional
può gestire bene possono essere ottenuti usando la verità, ad es. l'onnipresente
var x = passedInValue || defaultValue;
Tuttavia, non è difficile immaginare come ciò potrebbe andare storto. "Che cosa succede se passedInValue
è 0
o false
? O se voglio che sia null
? Come comunico la differenza tra non fornire un valore e fornire esplicitamente un valore nullo?" Problemi simili si verificano quando si utilizza una funzione: "Come faccio a distinguere tra un errore di ricerca e una ricerca con esito positivo di null?" Probabilmente, in JavaScript, undefined
potrebbe (apparentemente) servire alcuni di questi ruoli, ma è una "soluzione" che è peggio della malattia e anche non una soluzione.
La situazione è molto simile a null
nella maggior parte delle lingue o NULL
in SQL. La verità aumenta i problemi di null
. A questo punto, non sorprende che la maggior parte delle lingue funzionali tipizzate staticamente manchi di un equivalente a null
. Per qualche ragione, dopo decenni di esistenza, non sono a conoscenza di alcun linguaggio funzionale tipizzato staticamente che abbia deciso di aggiungere qualcosa come null
dopo la creazione della lingua.
Quindi, in effetti, la risposta è che non è il "modo JavaScript" di fare le cose, ma JavaScript non è mai stato davvero un leader nel fare le cose in modo corretto. Sfortunatamente, per questo particolare esempio, JavaScript è lontano da solo. In qualche modo dubito che Optional
non sarebbe stato utile in Java un decennio fa.