J'ai lu sur la (non) commodité d'avoir null
au lieu de (par exemple) Maybe
. Après avoir lu cet article , je suis convaincu qu'il serait préférable de l'utiliserMaybe
(ou quelque chose de similaire). Cependant, je suis surpris de voir que tous les langages de programmation impératifs ou orientés objet "bien connus" utilisent toujours null
(ce qui permet un accès non contrôlé à des types qui peuvent représenter une valeur "rien"), et qui Maybe
est principalement utilisé dans les langages de programmation fonctionnels.
Par exemple, regardez le code C # suivant:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Quelque chose sent mauvais ici ... Pourquoi devrions-nous vérifier si l'argument est nul? Ne devrions-nous pas supposer que chaque variable contient une référence à un objet? Comme vous pouvez le voir, le problème est que, par définition, presque toutes les variables peuvent contenir une référence nulle. Et si nous pouvions décider quelles variables sont "nulles" et lesquelles ne le sont pas? Cela nous permettrait d'économiser beaucoup d'efforts lors du débogage et de la recherche d'une "NullReferenceException". Imaginez que, par défaut, aucun type ne puisse contenir une référence nulle . Au lieu de cela, vous déclareriez explicitement qu'une variable peut contenir une référence nulle , uniquement si vous en avez vraiment besoin. Telle est l'idée derrière Peut-être. Si vous avez une fonction qui échoue dans certains cas (par exemple la division par zéro), vous pouvez retourner unMaybe<int>
, indiquant explicitement que le résultat peut être un entier, mais aussi rien! C'est une des raisons de préférer Peut-être au lieu de null. Si vous êtes intéressé par plus d'exemples, je vous suggère de lire cet article .
Les faits sont que, malgré les inconvénients de rendre la plupart des types annulables par défaut, la plupart des langages de programmation OO le font. C'est pourquoi je m'interroge sur:
- Quel genre d'arguments auriez-vous à implémenter
null
dans votre langage de programmation à la placeMaybe
? Y a-t-il des raisons ou s'agit-il simplement de «bagages historiques»?
Veuillez vous assurer de bien comprendre la différence entre null et peut-être avant de répondre à cette question.
null
ou son concept n'existe pas (IIRC Haskell en est un exemple).
null
s depuis longtemps. Ce n'est pas facile de laisser tomber ça.