Jest bardzo jasne, jeśli przeczytasz pierwsze zdanie pytania, że to pytanie nie dotyczy odpowiednich zastosowań, takich jak
eliminacja magicznych liczb , chodzi
w najlepszym razie o okropną, bezmyślną, głupią konsekwencję. I właśnie na to odpowiada ta odpowiedź
Zdrowy rozsądek mówi, że const char UPPER_CASE_A = 'A';
albo const char A = 'A'
nie dodaje niczego ale utrzymanie i złożoności do systemu. const char STATUS_CODE.ARRIVED = 'A'
to inna sprawa.
Stałe powinny reprezentować rzeczy, które są niezmienne w czasie wykonywania, ale mogą wymagać modyfikacji w przyszłości podczas kompilacji. Kiedy const char A =
poprawnie równa się coś innego niż A
?
Jeśli widzisz public static final char COLON = ':'
w kodzie Java, znajdź tego, kto to napisał i złam klawiaturę. Jeśli reprezentacja na COLON
zawsze zmieni się od :
ciebie, będzie miał koszmar konserwacji.
Zaciemnianie:
Co się stanie, gdy ktoś go zmieni, COLON = '-'
ponieważ wszędzie tam, gdzie go -
używa, wszędzie jest potrzebny? Czy zamierzasz napisać testy jednostkowe, które w zasadzie mówią assertThat(':' == COLON)
o każdym pojedynczym const
odwołaniu, aby upewnić się, że nie zostaną zmienione? Tylko po to, żeby ktoś naprawił test, kiedy je zmieni?
Jeśli ktoś faktycznie twierdzi, że public static final String EMPTY_STRING = "";
jest to przydatne i pożyteczne, po prostu kwalifikujesz jego wiedzę i bezpiecznie ignorujesz ją we wszystkim innym.
Każdy znak dostępny do wydruku w nazwanej wersji pokazuje tylko, że ktokolwiek to zrobił, nie jest uprawniony do pisania kodu bez nadzoru.
Spójność:
Sztucznie obniża także spójność, ponieważ odsuwa rzeczy od rzeczy, które ich używają i są z nimi powiązane.
W programowaniu komputerowym spójność odnosi się do stopnia, w jakim elementy modułu należą do siebie. Zatem spójność mierzy siłę związku między elementami funkcjonalności w danym module. Na przykład w bardzo spójnych systemach funkcjonalność jest ściśle powiązana.
Sprzęganie:
Łączy też wiele niepowiązanych ze sobą klas, ponieważ wszystkie kończą się odwoływaniem do plików, które tak naprawdę nie są powiązane z tym, co robią.
Ścisłe sprzężenie ma miejsce, gdy grupa klas jest od siebie wysoce zależna. Ten scenariusz powstaje, gdy klasa przyjmuje zbyt wiele obowiązków lub gdy jedna troska jest rozłożona na wiele klas, zamiast mieć własną klasę.
Jeśli użyjesz lepszej nazwy, tak DELIMITER = ','
jakbyś nadal miał ten sam problem, ponieważ nazwa jest ogólna i nie ma semantycznego. Ponowne przypisanie wartości nie pomaga bardziej w analizie wpływu niż wyszukiwanie i zastępowanie literału ','
. Ponieważ jaki kod wykorzystuje i potrzebuje ,
innych kodów, ale potrzebuje ;
teraz? Nadal muszę ręcznie sprawdzać każde użycie i je zmieniać.
W dziczy:
Niedawno odnowiłem 1,000,000+ LOC
aplikację, która miała 18 lat. Miał takie rzeczy public static final COMMA = SPACE + "," + SPACE;
. Nie jest to w żaden sposób lepsze niż tylko wskazanie, " , "
gdzie jest potrzebne.
Jeśli chcesz się spierać o czytelność , musisz nauczyć się konfigurować IDE tak, aby wyświetlał whitespace
znaki w miejscu, w którym je widzisz, lub cokolwiek innego, jest to po prostu niezwykle leniwy powód, aby wprowadzić entropię do systemu.
To również nie ,
zdefiniowano kilka razy z wieloma pisowni tego słowa COMMA
w wielu pakietów i klas. Z odniesieniami do wszystkich odmian zmieszanych razem w kodzie. Próba naprawienia czegoś bez zepsucia czegoś zupełnie niezwiązanego z niczym nie była koszmarem .
To samo z alfabetu, gdy było wielu UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
który przez większość czasu były równe A
, ale w niektórych przypadkach nie było . Dla prawie każdej postaci, ale nie dla wszystkich postaci.
I z historii edycji nie wynika, że jeden z nich był kiedykolwiek edytowany lub zmieniany przez 18 lat, z powodu tego, co powinno być teraz oczywistym powodem, że złamałoby zdecydowanie zbyt wiele rzeczy, których nie można wyśledzić, dlatego masz nową zmienną nazwy wskazujące na tę samą rzecz, której nigdy nie można zmienić z tego samego powodu.
W żadnej zdrowej rzeczywistości nie możesz argumentować, że ta praktyka nie robi nic, ale zaczyna od maksymalnej entropii.
Zrewidowałem cały ten bałagan i podkreśliłem wszystkie tautologie, a nowi zatrudnieni w college'ach byli znacznie bardziej produktywni, ponieważ nie musieli ścigać przez wiele poziomów pośrednich, na co const
wskazywały te odniesienia, ponieważ nie byli wiarygodni w tym, jak zostali nazwani vs co zawierały.