Designed by Freepik

Magic numbers

Dobry programista to taki, który pisze szybki, czysty i pokryty testami kod. Dobry programista to również taki, który ma na uwadze to, że kod, który aktualnie pisze, zapewne będzie modyfikowany przez niego samego bądź kogoś innego.

Często zdarza się tak że jakaś funkcjonalność ma być zrobiona na wczoraj i programista dostaje zadanie, które na dany moment wydaje się proste do zrobienia. Kod zostaje napisany i zapomina się o nim. Projekt się rozrasta, dochodzą nowe funkcjonalności czasami zależne od klientów. Programiści nie wymyślają koła na nowo tylko używają metod, klas czy komponentów dostępnych już w projekcie.

Powiedzmy że tym łatwym zadaniem było zmodyfikowanie raportu odwiedzin sklepu internetowego w taki sposób, że ilość unikalnych odwiedzin mnożymy przez współczynnik kupna dostając w ten sposób przewidywaną sprzedaż. Niech ten współczynnik będzie wynosił 20%. Klient tak chciał a z nim się nie dyskutuje. Dostajemy więc metodę:

class Report 
{

...

public function webTrafficReport() 
{
    return $this->uniqueVisits * 0.2;
}

...

}

 

Projekt dalej się rozwija. Klasa, w której utworzyliśmy metodę rozrosła się znacząco bo dodane zostały rozmaite raporty. Bardziej złożone obliczenia zostały wyniesione do klas dziedziczących po Report. Doszło nam paru klientów naszego oprogramowania.

Jeden z nowych zgłasza błąd. Dane w raporcie nie zgadzają mu się z danymi w Google Analitics. Programista dostaje zadanie usunięcia błędu. Okazuje się że błąd wynika z mnożenia razy 0.2. No i właśnie co to za 0.2? Trzeba teraz spędzić sporo czasu szukając czy zmiana tej wartości spowoduje szkody w innych raportach. Czy dane o wizytach są jakimś dziwnym sposobem mnożone przez 5? Potrzeba teraz spędzić sporo czasu żeby odnaleźć o co tak właściwie chodzi. A wystarczyło napisać to w ten sposób:

class Report 
{

const PREDICTED_PURCHASE_FACTOR = 0.2;

...

public function webTrafficReport() 
{
    return $this->uniqueVisits * PREDICTED_PURCHASE_FACTOR;
}

...

}

W ten sposób pozbywamy się magic number i ułatwiamy życie sobie i innym, którzy w przyszłości będą czytać nasz kod. Warto pamiętać o tym, żeby nie zostawiać w kodzie dziwnych wartości liczbowych. Zamiast tego ubierajmy je w więcej mówiące stałe.

Obrazek z Designed by Freepik

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *