Nigdy nie byłem zwolennikiem programowania obiektowego, a jeśli cokolwiek się urosło, tym więcej dowiaduję się o programowaniu w ogóle. Jak już studiował różne paradygmaty programowania, zdałem sobie sprawę, że niezmienność jest jednym z centralnych pojęć projektowania programu, wpływając oprogramowanie napisane według dowolnego filozofii. Jest to niezwykle ważne w programowaniu funkcjonalnym, z implikacjami optymalizacji i współbieżności oprócz prostych gwarancji bezpieczeństwa.
Zasadniczo wszystko, co może być niezmienne, prawdopodobnie powinno być, chyba że masz dobry powód do zmiany stanu. Z mojego doświadczenia wynika, że pisanie programów w dowolnym języku w celu osiągnięcia tego celu prowadzi do bezpieczniejszego, lepszego kodu. W const
razie potrzeby nie masz nic do stracenia - niezmienność jest darmowa!
(Nawiasem mówiąc, zastanawiałem się nad stworzeniem rozwidlenia GCC dla dialektu C ++, w którym wszystkie typy const
nie są wyraźnie określone jako mutable
. Jeśli istnieje wsparcie dla takiej rzeczy, całkowicie zobowiązuję się do jej utrzymania i używania.)
Z punktu widzenia OO niezmienność wymusza enkapsulację, uniemożliwiając nieograniczony dostęp do zapisu. Zmniejsza to sprzężenie między klasami, ponieważ obiekty niezmienne muszą w pełni zarządzać własnym stanem i tym samym zachowywać się jak zwykłe wartości. Const poprawność znacznie ułatwia proces sprawdzania poprawności programu, szczególnie w kontekście programowania współbieżnego. Dzięki semantyce referencji C ++ i semantyce referencji do wartości C ++ 0x możesz korzystać z niezmiennych obiektów bez obawy o koszty związane z kopiowaniem ich w dowolnym miejscu. Co więcej, kompilator może pracować z niesamowitą magią optymalizacji, jeśli pracujesz z najczęściej niezmiennymi obiektami.
Wiem, że pisanie const
wszędzie jest do bani , ale szybko się do tego przyzwyczajasz, a korzyści stają się z czasem widoczne pod względem niezawodności i łatwości konserwacji. Nie jestem genialnym pisarzem i wydaje się, że udowodnienie tego jest trudnym zadaniem, ale wiem, że stała poprawność była bardzo pomocna dla mnie jako programisty przy projektowaniu i wdrażaniu programów i myślę, że doświadczenie jest najlepszy nauczyciel pod tym względem.