Non sono mai stato un sostenitore della programmazione orientata agli oggetti, e se mai sono cresciuto di meno, più apprendo sulla programmazione in generale. Poiché ho studiato diversi paradigmi di programmazione, mi sono reso conto che l'immutabilità è uno dei i concetti centrali della progettazione del programma, che influenza il software scritto secondo la filosofia qualsiasi . È estremamente importante nella programmazione funzionale, con implicazioni nell'ottimizzazione e nella 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 mutabile. Nella mia esperienza, scrivere programmi in qualsiasi lingua alla ricerca di questo obiettivo porta a un codice migliore più sicuro. Non hai nulla da perdere usando const
dove applicabile-l'immutabilità è gratis!
(Per inciso, mi sono divertito con l'idea di creare un fork di GCC per un dialetto di C ++ in cui tutti i tipi sono const
a meno che non sia esplicitamente qualificato come mutable
. Se c'è un supporto per una cosa del genere, lo farò totalmente impegnato a mantenerlo e ad usarlo.)
Da un punto di vista OO, l'immutabilità impone l'incapsulamento impedendo l'accesso illimitato alla scrittura. Riduce l'accoppiamento tra classi perché gli oggetti immutabili devono gestire completamente il proprio stato e quindi comportarsi come valori ordinari. La correttezza di Const facilita significativamente il processo di dimostrazione della correttezza del programma, specialmente nel contesto della programmazione concorrente. Con la semantica di riferimento di riferimento C ++ e di c ++ 0x rvalue, è possibile utilizzare oggetti immutabili senza preoccuparsi dell'overhead di copiarli dappertutto. Inoltre, il compilatore può funzionare con una magia di ottimizzazione piuttosto sorprendente se stai lavorando con oggetti per lo più immutabili.
So che fa schifo a 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 geniale, e sembra essere un compito difficile provato a spiegarcelo, ma so che la correttezza costante mi è stata di immensamente utile come sviluppatore quando progettavo e implementavo programmi, e penso che l'esperienza sia il miglior insegnante in questo senso.