Spora część osób na początku nauki programowania ma problem z pisaniem czytelnego kodu (doświadczenia wyniesione z lekcji informatyki, sprawdzanie kodu z czterema pętlami zagnieżdżonymi bez ani jednego wcięcia to masochizm) dlatego zebrałem kilka podstawowych zasad "czytelnego programowania" i umieściłem w jednym miejscu. Dla większości może wydawać się to banalne ale mam nadzieje, ze ktoś z tego skorzysta.
1. KomentarzeCzyli krótkie opisy fragmentów kodu. Dużo prościej zrozumieć porządnie wykomentowany kod niż ten bez komentarzy. Łatwiej też połapać się w kodzie pisanym jakiś czas temu

Wyróżniamy dwa rodzaje komentarzy:
- Jednoliniowy (umieszczany za dwoma ukośnikami). Stosowany do krótkich i zwięzłych komentarzy.
Przykład:
int i; // licznik pętli
- Wieloliniowy (umieszczany pomiędzy /* a */). Stosowany do dłuższych opisów fragmentów kodu, można także używać go do umieszczania belki z informacjami "na górze" pliku (na przykład autor, kontakt itd).
Przykład:
/*
Pierwsza linia
Druga linia
Trzecia linia
*/
2. WcięciaWcięcia to specjalnie stosowane "odstępy" w naszym kodzie. Dzięki nim wyraźnie widzimy gdzie kończy się a gdzie zaczyna nowy blok, np. pętla, instrukcja warunkowa itd. Wcięcie umieszczamy najczęściej w linijce pod klamerką w lewo (w c++, w pascalu wcięcie robimy po instrukcji begin).
Przykład:
void Funkcja()
{
(tu robimy wcięcie)
kod po wcięciu (przesuniety w prawo)
kolejna linijka kodu
for(;;)
{
(a tutaj kolejne)
kod w petli
kod w petli 2
}
}
Wcięcie tworzymy stawiając kilka spacji lub tabulacje.
3. NazewnictwoKolejna ważna sprawa to to, jak nazywamy nasze zmienne/klasy/funkcje. Nazwy typu asd, dupa itd za wiele nie mówią, więc dobrze jest nazywać zmienne zgodnie z ich przeznaczeniem, np. position_x lub archer.range w przypadku pola klasy.
Bardzo przydatną sprawą jest tak zwana notacja węgierska, czyli systematyka nazywania zmiennych. Polega ona na dodawaniu przedrostków określających czym jest zmienna (jej typ, zasięg itd). Najczęsciej używane przedrostki notacji węgierskiej:
Typy zmiennych:
i - liczba całkowita (integer)
f - liczba zmiennoprzecinkowa (float)
d - liczba zmiennoprzecinkowa podwójnej precyzji (double)
l - duża liczba całkowita (long)
c - znak (char)
b - wartość logiczna (bool)
dw - podwójne słowo (dword)
w - słowo (word)
by lub byte - bajt
Popularne rozszerzenia:
str - ciąg znaków (string)
h - uchwyt (handle)
v, vec - wektor (vector)
pt - punkt (obiekt zdefiniowany przez użytkownika)
rgb - paleta kolorów r,g,b (struktura lub typ zdefiniowana przez użytkownika)
Modyfikatory:
p - wskaźnik na (pointer)
r - referencja na (reference)
a, ary - tablica
Zasięg:
m_ - pole klasy
g_ - zmienna globalna
s_ - zmienna statyczna
Dodatkowe prefiksy stosuje sie przy nazewnictwie klas, np:
C - zwykła klasa, np CFoo
I - klasa abstrakcyjna wykorzystywana jako szablon
UI - klasy dotyczące interfejsu (user interface)
S - singleton
(źródło: pierwszy tom perełek)
Przykładowe nazwy z wykorzystaniem notacji węgierskiej:
iSuma (zmienna typu integer)
fWynikDzielenia (zmienna typu float)
CKlasaBohatera (klasa)
SLogger (singleton)
m_iPunktyZycia (pole klasy, typ int)
g_Device (zmienna o zasięgu globalnym)
Jak widać prefiksy można łączyć (m_iPunktyZycia mowi nam ze zmienna jest polem klasy i jest typu int).
Kolejnym aspektem nazewnictwa jest oddzielanie nazw kilkuwyrazowych. Tu gusta są podzielone, można pisać na różne sposoby, oto kilka z nich:
pierwszyDrugiWyraz,
PierwszyDrugiWyraz,
pierwsz_drugi_wyraz.
Każdy wybiera jak mu najwygodniej, ja preferuje zaczynanie każdego wyrazu wielką literą.
Bonus:
Linki do dyskusji związanych z tematem:
http://forum.gamedev.pl/index.php/topic,1117.0.html Kod - po polsku czy po angielsku?
http://forum.gamedev.pl/index.php/topic,3502.0.html Zaawansowani a komentarze w kodzie
Fajnie by było jakbyście podsunęli swoje pomysły jak pisać czytelny kod, chętnie wyedytuje posta i dodam wasze patenty

Aha, jeśli znalazłeś błąd to napisz PM-kę, poprawię.