Je n'ai jamais été un partisan de la programmation orientée objet, et si je me suis développé moins, j'en apprends davantage sur la programmation en général. Comme je l' ai étudié différents paradigmes de programmation, je me suis rendu compte que immuabilité est l' un des les concepts centraux de la conception des programmes, ce qui affecte le logiciel écrit selon toute philosophie. C'est extrêmement important dans la programmation fonctionnelle, avec des implications dans l'optimisation et la concurrence en plus des garanties de sécurité simples.
Fondamentalement, tout ce qui peut être immuable devrait probablement l' être, sauf si vous avez une bonne raison pour un état mutable. D'après mon expérience, l'écriture de programmes dans n'importe quelle langue pour atteindre cet objectif conduit à un code plus sûr et meilleur . Vous n'avez rien à perdre en utilisant le const
cas échéant - l'immuabilité est gratuite!
(Par ailleurs, j'ai joué avec l'idée de créer une fourchette de GCC pour un dialecte de C ++ dans lequel tous les types sont const
sauf si explicitement qualifiés de mutable
. S'il y a un support pour une telle chose, je m'engagerai totalement à le maintenir et à l'utiliser.)
D'un point de vue OO, l'immuabilité impose l'encapsulation en empêchant l'accès en écriture illimité. Il réduit le couplage entre les classes car les objets immuables doivent gérer pleinement leur propre état et donc se comporter comme des valeurs ordinaires. La correction des constances facilite considérablement le processus de vérification de la correction des programmes, en particulier dans le contexte d'une programmation simultanée. Avec la référence sémantique C ++ et la sémantique de référence rvalue C ++ 0x, vous pouvez utiliser des objets immuables sans vous soucier de la surcharge de les copier partout. De plus, le compilateur peut fonctionner avec une magie d'optimisation assez incroyable si vous travaillez avec des objets principalement immuables.
Je sais que ça craint de taper const
partout, mais on s'y habitue rapidement, et les avantages deviennent apparents au fil du temps en termes de fiabilité et de maintenabilité. Je ne suis pas un brillant écrivain, et cela semble être une tâche difficile avérée de le prouver, mais je sais que l'exactitude de la const m'a été extrêmement utile en tant que développeur lors de la conception et de la mise en œuvre de programmes, et je pense que l'expérience est le meilleur professeur à cet égard.