Jason. Cała informatyka w jednym miejscu!

W kolejnym artykule mam dla wszystkich chętnych parę wskazówek jak pisać dobry kod. "Dobry" czyli czytelny, efektywny i mniej obciążający dla procesora. Zachęcam wszystkich zainteresowanych do czytania!

DOBRY KOD TO PRZEDE WSZYSTKIM CZYTELNY KOD

Wierzcie mi lub nie, ale pisanie kodu też wymaga dużej dawki praktyki. Dobry kod w punkcie pierwszym, musi być przede wszystkim czytelny dla każdego. Dla Was, dla innych programistów, ale również dla innych ludzi. Drugi człowiek może znać język, ale nie ma zielonego pojęcia o tym, w jaki sposób Wy piszecie kod źródłowy. Każdy z nas posiada inne przyzwyczajenia oraz przestrzega własnych konwencji nazewniczych. Choć o gustach się nie dyskutuje, to czytelność kodu powinno być regułą nieprzyjmującą żadnych wyjątków.

Przedstawię dwa fragmenty kodów źródłowych w języku C na zasadzie przeciwieństw. Określcie sami co się wydaje przyjaźniejsze do czytania.

NAZEWNICTWO ZMIENNYCH

// przykład 1
int s_m, gp, _xyz_;

// przykład 2
int sentMessages, gainedPoints, receivedErrors;

Zacznijmy od początku, zmienne. To nie jest częste zjawisko, aczkolwiek zdarzało się widzieć wiele zmiennych, które powodowały dezorientację. Dobry kod wymaga, aby wszystkie zmienne mówiły nam od razu do czego one służą i w jakim celu są określonego typu. Ja piszę najczęściej w stylu "camelCase", czyli pierwsze słowo z małej litery, a każde następne z dużej w celu oznaczenia kiedy się zaczyna kolejne słowo. Miejcie na względzie to, że niektóre języki nakazują stosować się do innych konwencji nazewniczych!

WCIĘCIA I ODSTĘPY

// przykład 1
for(int i=0;i<10;i++){zrobCos(); printf("%d\n",i);}

// przykład 2
for (int i = 0; i < 10; i++)
{
	zrobCos();
	printf("%d\", i);
}

Tutaj też kwestia gustu nie wchodzi w grę. Jeżeli wprowadzamy gdziekolwiek kolejną instrukcję, to robimy to w nowej linii. W ten sposób będzie dużo łatwiej identyfikować do którego bloku należą określone czynności. Przy klamerce otwierającej można jeszcze podyskutować, bo niektórzy wolą je umieszczać tuż po nawiasie zamykającym listę parametrów funkcji albo tak nakazują zasady formatowania kodu.

INKREMENTACJA ZAMIAST RĘCZNEGO DODAWANIA

// przykład 1
int times = 1;

do
{
	printf("Wykonanie no. %d\n", times);
	
	times = times + 1;
}
while (times <= 10);

//przykład 2
int times = 1;

do
{
	printf("Wykonanie no. %d\n", times);
}
while (++times <= 10);

Ręczne dodawanie "plus jeden" jest zbyt dziwnie wyglądające. Proponuję zamienić ten zapis na inkrementację, a szczególnie na preinkrementację. Przy postinkrementacji komputer przechowuje kopię wartości liczbowej gdzieś na uboczu, dodaje do kopii jedynkę i zamienia liczbę na zmodyfikowaną kopię. Preinkrementacja z kolei dodaje jedynkę do liczby i tyle. Dobry kod musi być również efektywny.

PRZECHOWYWANIE WIELOKROTNIE WYKORZYSTYWANYCH TYCH SAMYCH OBLICZEŃ W ZMIENNYCH LOKALNYCH

// przykład 1
int squaresSum = 0;
 
for (int n = 1; n <= 10; n++)
{
    printf("Kwadratem liczby %d jest %d.\n", n, n*n);
 
    squaresSum += n*n;
}

// przykład 2
int squaresSum = 0;
 
for (int n = 1; n <= 10; n++)
{
    int squareN = n*n;
    
    printf("Kwadratem liczby %d jest %d.\n", n, squareN);
 
    squaresSum += squareN;
}

Tutaj możecie się mocno zastanawiać, aczkolwiek to też ma sens oprócz zachowania pewnego porządku. Procesor gdy widzi to samo użyte wyrażenie w wielu miejscach jednocześnie, nie działa tak jak my, że sobie policzymy raz w głowie i już znamy wynik w każdym miejscu. On musi za każdym razem na nowo policzyć to samo wyrażenie, nawet jeśli jest ono identyczne! Właśnie dlatego sto razy lepiej zdefiniować sobie zmienną lokalną, która na czas przeprowadzanych obliczeń w oparciu o dane, przechowa nam pewne wyrażenie, które wówczas jedynie podstawi w określone miejsca. W ten sposób, pozbawicie go dodatkowego wysiłku przeliczania ciągle tego samego.


Widzieliście przed sekundą parę prostych przykładów, które celowo zostały podkoloryzowane, aby jeszcze bardziej Was przekonać do pewnych refleksji z tym związanych. Dobry kod również jest tematem wielu debat, ale między innymi wieloletnią praktyką, którą warto później szokować innych. Naprawdę warto.

PODOBNE ARTYKUŁY