Magiczne liczby w kodzie źródłowym

przykładowe liczby

Magiczne liczby w kodzie źródłowym to liczby, które utrudniają czytanie i zrozumienie treści programu. Czytanie i zrozumienie kodu źródłowego zawierającego magiczne liczby staje się zadaniem czasochłonnym. Zadanie to może wymagać wielokrotnej analizy kontekstu kodu, w którym znajdują się magiczne liczby.

W artykule zostaną przedstawione fragmenty kodu z rzeczywistego projektu – gry zręcznościowej, którą napisałem w 2012 roku. Nazewnictwo zmiennych oraz innych elementów w przedstawianym kodzie jest odrębnym tematem, który nie będzie poruszany w tym artykule.

zrzut ekranu z gry Reakcja
Zaimplementowana gra. Celem gry jest sprawdzenie szybkości odpowiadania na zadane pytania 🙂

Poniżej znajduje się pierwszy wybrany fragment kodu:

random_interesting = fun_random(0, 9);
sur_int_fact = TTF_RenderUTF8_Solid(fonts.get_font(F_ABOUT), interesting_facts[random_interesting].c_str(), int_fact_col);

W pierwszej linii kodu losowana jest liczba z zadanego przedziału liczb. Czytając tę linię kodu nie wiemy od razu dlaczego został wybrany dany przedział liczb. Konieczna jest dodatkowa analiza kontekstu kodu. Z kolejnej linii kodu dowiadujemy się, że wylosowana liczba prawdopodobnie służy do pobrania losowego elementu z tablicy. Możemy pozbyć się magicznej liczby 9 w następujący sposób:

random_array_index = fun_random(0, interesting_facts.size());

Oprócz pozbycia się magicznej liczby 9, uzyskaliśmy dodatkowo elastyczniejszy kod. Gdy wielkość tablicy interesting_facts ulegnie zmianie, nie będzie konieczna aktualizacja liczby 9 na poprawną, nową wartość.

Poniższej znajduje się kolejny fragment kodu, który zostanie poddany analizie:

if(current_level == 4)       // end of the game
{
    return false;
}

Czytając sam warunek if nie jesteśmy w stanie od razu stwierdzić, co oznacza magiczna liczba 4. Konieczna jest dodatkowa analiza kontekstu kodu. W tej samej linii kodu co warunek if został umieszczony komentarz. Informuje nas, że current_level ustawiony na wartość 4 oznacza koniec gry. Możemy ulepszyć zamieszczony kod w następujący sposób:

const int LAST_LEVEL = 4;

// ...

if(current_level == LAST_LEVEL)
{
    return false;
}

Wprowadziliśmy dwa udoskonalenia. Pierwsze udoskonalenie to przypisanie magicznej liczby do stałej oraz nadanie jej nazwy LAST_LEVEL. Drugie udoskonalenie to usunięcie komentarza, który teraz nie jest konieczny do zrozumienia kodu. W tym przypadku kod opisuje sam siebie i nie wymaga pisania dodatkowego komentarza.

Podsumowanie:

  • magiczne liczby to liczby, które utrudniają czytanie i zrozumienie kodu źródłowego,
  • warto starać się ich unikać w pisanym kodzie,
  • zamiast magicznej liczby możemy zdefiniować stałą o opisowej nazwie.

Dla humorystycznego zakończenia artykułu poniżej zamieszczam ciekawą nazwę jednej z funkcji w analizowanym projekcie:

void feilure()

🙂

Dziękuję za przeczytanie artykułu 🙂.

Jeżeli chcesz poszerzyć wiedzę na temat komentarzy w kodzie źródłowym to zachęcam do zapoznania się z artykułem Komentarze w kodzie źródłowym dostępnym tutaj: https://konstrukcjaoprogramowania.pl/komentarze-w-kodzie-zrodlowym

1 myśl na “Magiczne liczby w kodzie źródłowym”

Dodaj komentarz

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