Moja pierwsza w miarę rozbudowana gra w Javie napisana parę lat temu, studium przypadku pt. Jak napisać brudny nieczytelny kod. To jest tutorial JAK NIE PISAĆ KODU. Przed czytaniem polecam zapoznanie się z grą aby wiedzieć za co odpowiedzialne są przytaczane fragmenty kodu. Google Play.
Pisanie językiem polskim w kodzie. Najgorsze co może być. Nawet jeśli masz problem z podstawowym angielskim, włącz sobie translator gdzieś w tle i alt-tabuj za każdym razem gdy potrzebujesz odpowiedniego słowa. Jak nie wiesz do końca jak nazwać zmienną aby dobrze opisała do czego służy – myśl nawet dłuższą chwilę. Wbrew pozorom, może i wygląda to głupio, ale to potrzebne. Konserwacja kodu boli, tym bardziej, jeśli ktoś to po tobie będzie czytał.
Przykład 1. O co mi tu właściwie chodziło?
Z tego co pamiętam, to metoda odlicza i wypisuje sekundy w momencie wpisywania odpowiedniej kolejności kart (odsyłam do gry). Po if-ie którego sensu kompletnie już nie rozumiem następuje prawdopodobnie zmiana pozycji sprajta z odpowiednią sekundą, następnie… Wypisujemy go?
Przykład 2. Odpowiednik nazewnictwa po angielsku w Speechlist.
Zapominanie o OOP
Przenoś do klas co się da, przenoś do funkcji to co powtarzasz. To powinno być wkładane do głowy od pierwszego programu. Poniżej kod który min. zmienia teksturę przycisku skinu do kart który aktualnie jest wybrany – DLA POJEDYNCZEGO PRZYCISKU. Czyli powtórzyłem to dokładnie 6 razy. Dzisiaj stworzyłbym publiczną metodę dla przycisku która przyjmowałaby odpowiednie flagi (czy karta jest kupiona, czy aktualnie jest otwarte podmenu kupowania) i ją wywoływał dla każdego z przycisków (za pomocą jakiegoś prostego fora, wcześniej wrzucając je do tablicy).
Wszystko to co tutaj załatwiane jest w sposób rzemieślniczy, w skali masowej robię w klasie Screen projektu Speechlist, zamiast przejmować się ustawianiem przeźroczystości czcionki (w przejściach pomiędzy ekranami), robi to za mnie automatycznie klasa, dla każdego tekstu który do niej przypisałem:
Przykład 3. Odpowiednik w którym obiektowo realizuję cele.
Formatowanie i komentowanie
Tak właściwie, to jest gorsze od polskiego w kodzie. IDE SFORMATUJE ZA CIEBIE KOD JEDNYM SKRÓTEM (defaultowo InteliJ -> ctrl + shift +L, w Eclipsie zdaje się że ctrl + a żeby zaznaczyć cały plik a potem ctrl + shift + F – skróty mają to do siebie że wchodzą w pamięć mięśniową i plus minus uda ci się odpowiednio ułożyć palce ale jednocześnie możesz nie móc odpowiedzieć na pytanie jaka to kombinacja, nie mając klawiatury dosłownie pod rękami). Do tego te komentarze które niby miały coś przypomnieć, chwilowo usunąć linię kodu która coś psuła, ale właściwie to są na wieczne nieusunięcie w limbo pomiędzy żyjącym a nieżyjącym kodem.
Przykład 4. Niechlujnie sformatowany kod.
Przykład ze Speechlist, jak robić to dobrze; w zasadzie nie ma tu nawet czego komentować.
Przykład 5. Dobrze sformatowany kod.
Magic numbers
Ooo zapiszę sobie tutaj pozycję tego, w sumie to na chwilę, a nawet jeśli, przecież będę pamiętał co to miało oznaczać…
Przykład z kodu Speechlist jak robić to prawidłowo, w tym przypadku zadeklarowałem publiczną klasę na stałe:
Przykład 6. Zadeklarowanie stałych czytelnymi nazwami w specjalnie do tego stworzonym pliku.
Całe repozytorium mogłoby być cytowane na jakichś wykładach, złoża przykładów są obszerne.Początkowym purystom językowym polecam ksiązkę Clean Code, przykłady w Javie ale mocno uniwersalnego zastosowania.Repozytorium z całym projektem do pobrania. Dla porównania, na odtrutkę, wrzucę prawidłowe odpowiedniki powyższych w moim ostatnim projekcie, Speechlist.
https://bitbucket.org/dbeef/speechlist
PS: Sorry za kod w postaci zdjęć, darmowy WP nie pozwala na wtyczki koloryzujące składnie, w sumie zrozumiały model biznesowy.
Bonus
Znalazłem w telefonie film pokazujący prototyp pierwszego Memo Boxes, minęło kilka miesięcy zanim wersja z filmiku stała się tą, która jest obecnie na Google Play.
Do tego parusekundowy filmik przedstawiający jakiś miesiąc przed wrzuceniem gry na Google Play, jak widać po monitorze w tle pracowałem nad cząsteczkami.