Usuwanie nieosiągalnego kodu
W statycznym typie języka statycznego zawsze powinieneś wiedzieć, czy kod jest rzeczywiście osiągalny, czy nie: usuń go, skompiluj, jeśli nie ma błędu, to nie był osiągalny.
Niestety, nie wszystkie języki są typowane statycznie i nie wszystkie języki typowane statycznie są oparte na zasadach. Do rzeczy, które mogą pójść nie tak, należą (1) refleksja i (2) nieokreślone przeciążenie.
Jeśli używasz języka dynamicznego lub języka z wystarczająco silnym odzwierciedleniem, że analizowany fragment kodu może być potencjalnie dostępny w czasie wykonywania przez odbicie, nie możesz polegać na kompilatorze. Takie języki to Python, Ruby lub Java.
Jeśli używasz języka z nieprincised przeciążeniem, samo usunięcie przeciążenia może po prostu bez problemu przełączyć rozdzielczość przeciążenia na inne . Niektóre takie języki pozwalają zaprogramować ostrzeżenie / błąd podczas kompilacji związane z użyciem kodu, w przeciwnym razie nie można polegać na kompilatorze. Takie języki to Java (użycie @Deprecated
) lub C ++ (użycie [[deprecated]]
lub = delete
).
Tak więc, chyba że masz szczęście pracować ze ścisłymi językami (przychodzi na myśl Rust), możesz naprawdę strzelać sobie w nogi, ufając kompilatorowi. I niestety pakiety testowe są na ogół niekompletne, więc też niewiele więcej pomocy.
Przejrzyj następną sekcję ...
Usuwanie potencjalnie nieużywanego kodu
Bardziej prawdopodobne jest, że kod jest faktycznie przywoływany, jednak podejrzewasz, że w praktyce gałęzie kodu, które go dotyczą, nigdy nie są pobierane.
W takim przypadku, bez względu na język, kod jest łatwo dostępny i można używać tylko oprzyrządowania w czasie wykonywania.
W przeszłości z powodzeniem stosowałem trójfazowe podejście do usuwania takiego kodu:
- Na każdej gałęzi, co do której podejrzewa się, że NIE zostanie podjęta, zaloguj ostrzeżenie.
- Po jednym cyklu wyrzuć wyjątek / zwróć błąd po wprowadzeniu określonego fragmentu kodu.
- Po kolejnym cyklu usuń kod.
Co to jest cykl Jest to cykl użycia kodu. Na przykład w przypadku wniosku finansowego spodziewałbym się krótkiego cyklu miesięcznego (z wypłatami wynagrodzeń na koniec miesiąca) i długiego cyklu rocznego. W takim przypadku musisz poczekać co najmniej rok, aby sprawdzić, czy ostrzeżenie nigdy nie jest emitowane, aby inwentaryzacja na koniec roku mogła korzystać ze ścieżek kodu, które w innym przypadku nigdy nie byłyby używane.
Mamy nadzieję, że większość aplikacji ma krótsze cykle.
Radzę umieścić komentarz do zrobienia TODO z datą, wskazujący, kiedy przejść do następnego kroku. I przypomnienie w twoim kalendarzu.