Non sono mai stato un sostenitore della programmazione orientata agli oggetti, e semmai sono cresciuto di meno, tanto più imparo sulla programmazione in generale. Come ho studiato diversi paradigmi di programmazione, ho capito che l'immutabilità è uno dei concetti centrali del programma di progettazione, che colpisce software scritto in base alle qualsiasi filosofia. È estremamente importante nella programmazione funzionale, con implicazioni in termini di ottimizzazione e concorrenza oltre alle semplici garanzie di sicurezza.
Fondamentalmente, tutto ciò che può essere immutabile probabilmente dovrebbe essere, a meno che tu non abbia una buona ragione per lo stato mutevole. Nella mia esperienza, scrivere programmi in qualsiasi lingua per raggiungere questo obiettivo porta a un codice più sicuro e migliore . Non hai nulla da perdere usando const
dove applicabile: l'immutabilità è gratuita!
(Per inciso, ho giocato con l'idea di creare un fork di GCC per un dialetto di C ++ in cui tutti i tipi sono const
esplicitamente qualificati come mutable
. Se c'è supporto per una cosa del genere, mi impegnerò totalmente a mantenerla e usarla.)
Da un punto di vista OO, l'immutabilità impone l'incapsulamento impedendo l'accesso in scrittura senza restrizioni. Riduce l'accoppiamento tra le classi perché gli oggetti immutabili devono gestire completamente il proprio stato e comportarsi quindi come valori ordinari. La correttezza costante facilita in modo significativo il processo di dimostrazione della correttezza del programma, soprattutto nel contesto della programmazione concorrente. Con la semantica di riferimento C ++ e C ++ 0x rvalue, è possibile utilizzare oggetti immutabili senza preoccuparsi del sovraccarico di copiarli ovunque. Inoltre, il compilatore può funzionare con un'incredibile magia di ottimizzazione se lavori con oggetti per lo più immutabili.
So che fa schifo digitare const
ovunque, ma ci si abitua rapidamente e i vantaggi diventano evidenti nel tempo in termini di affidabilità e manutenibilità. Non sono uno scrittore brillante, e sembra essere un compito difficile dimostrarlo, ma so che la correttezza const è stata immensamente utile per me come sviluppatore durante la progettazione e l'implementazione di programmi, e penso che l'esperienza sia il miglior insegnante in questo senso.