Szczytem, na który sięgnęły inne odpowiedzi, nie jest to, że „magiczne wartości” są złe, ale że powinny być:
- rozpoznawalne jako stałe;
- zdefiniowane tylko raz w ramach całej ich dziedziny zastosowania (jeżeli jest to możliwe z architektonicznego punktu widzenia);
- zdefiniowane razem, jeśli tworzą zestaw stałych, które są w jakiś sposób powiązane;
- zdefiniowane na odpowiednim poziomie ogólności w aplikacji, w której są używane; i
- zdefiniowane w taki sposób, aby ograniczyć ich użycie w nieodpowiednich kontekstach (np. podatne na sprawdzanie typu).
To, co zazwyczaj odróżnia dopuszczalne „stałe” od „magicznych wartości”, to naruszenie jednego lub więcej z tych reguł.
Dobrze użyte, stałe pozwalają nam po prostu wyrazić pewne aksjomaty naszego kodu.
Co prowadzi mnie do ostatecznego punktu, że nadmierne użycie stałych (a zatem nadmierna liczba założeń lub ograniczeń wyrażonych w kategoriach wartości), nawet jeśli w inny sposób spełnia powyższe kryteria (ale zwłaszcza jeśli odbiega od nich), może sugerować, że opracowane rozwiązanie nie jest wystarczająco ogólne lub dobrze ustrukturyzowane (i dlatego tak naprawdę nie mówimy już o zaletach i wadach stałych, ale o zaletach i wadach dobrze ustrukturyzowanego kodu).
Języki wysokiego poziomu zawierają konstrukcje wzorców w językach niższego poziomu, które musiałyby wykorzystywać stałe. Te same wzorce można również zastosować w języku wyższego poziomu, ale nie powinno tak być.
Ale może to być osąd eksperta oparty na wrażeniu wszystkich okoliczności i jak powinno wyglądać rozwiązanie, a to, w jaki sposób uzasadnienie tego osądu będzie zależeć w dużej mierze od kontekstu. Rzeczywiście, może to nie być uzasadnione żadną ogólną zasadą, z wyjątkiem stwierdzenia: „Jestem na tyle dorosły, że widziałem już tego rodzaju pracę, z którą jestem zaznajomiony, zrobiony lepiej”!
EDYCJA: zaakceptowałem jedną edycję, odrzuciłem inną, a teraz dokonałem własnej edycji, czy mogę teraz rozważyć styl formatowania i interpunkcji mojej listy reguł, który należy ustalić raz na zawsze haha!