- Tak, to jest lekka pięta achillesowa tego projektu - muszę przepisać metody ze składnią arrow function. Dzięki, że mi to wytknąłeś. Po prostu zacząłem tego używać jak to poznałem i jak jeszcze tworzyłem coś w paradygmacie funkcyjnym to (np. jest tak w pliku rules.js) to korzystam tylko z tej notacji.
Tylko to są dwie różne notacje. JavaScript jest trochę taką łataniną i wiele rzeczy wygląda podobnie, a ma inne znaczenie dla języka.
const openCloseRulesWindow = () => {
To jest utworzenie zmiennej o nazwie openCloseRulesWindow
i przypisanie do niej funkcji strzałkowej.
Ale jak zrobisz coś takiego w klasie, to już będzie to znaczyć co innego i będzie to specjalna notacja 'instance field', która jest nową funkcją JSa i jest cukrem składniowym dla przypisania tego w konstruktorze.
- Mógłbyś powiedzieć mi w jaki sposób oddzielić logikę z GUI? Nie jestem pewny dokładnie o co Ci chodzi - czy o CSSowe zmiany (np. stylów, kolorów), czy o pobieranie elementów z DOM? Na to powinna być jakaś jedna oddzielna klasa/moduł?
To może inaczej - wyobraź sobie, że musisz tę samą grę napisać używając divów, ale jednocześnie musisz tę samą grę napisać, żeby działała w trybie tekstowym.
I teraz tak - pewne rzeczy będą wspólne (logika gry - np. sposób losowania liczb, zasady punktacji itp.), a pewne rzeczy będą związane czysto z GUI (np. wyświetlenie diva na ekranie kontra wypisanie użytkownikowi w konsoli czegoś).
Oczywiście nie musisz robić swojej gry w trybie tekstowym (chociaż czasem się przydają takie rzeczy), bardziej chodzi mi o wyobrażenie sobie sytuacji, że logika gry i GUI to są dwie różne rzeczy.
Np. w klasie Game masz coś takiego:
this.round = 1;
this.throwPossibilites = 2;
this.diceThrowBtn = document.querySelector(".player-info__dice-throw");
this.startGameBtn = document.querySelector(".start-game-window__start-game");
2 pierwsze linijki to logika gry, a kolejne 2 linijki to GUI.
I teraz pomyśl np. że z jakichś powodów musisz wydzielić samą logikę (np. żeby zrobić grę, która będzie działać na serwerze) albo jeśli będziesz chciał zmienić GUI (np. narysować to na canvasie). I mając zaplątane te dwie rzeczy w jednej funkcji(i klasie) nie zrobisz tego.
Tak samo dalej:
const secondPlayerTotalScore = this.secondPlayerName.textContent !== "Komputer" ?
tutaj wprost traktujesz GUI(w postaci przeglądarkowego DOM i divów) jako miejsce składowania danych, z których wyciągasz nazwę gracza.
I podane przykłady łamią zasadę Single Responsibility Principle, o której również jest mowa w książce Czysty Kod, i która jest zdefiniowana w ten sposób, że klasa powinna mieć tylko jeden powód do zmiany - a tutaj tych powodów jest więcej - bo może będziesz chciał zmienić logikę gry, może sposób wyświetlania na planszy, może sposób zapisywania danych gry (zamiast zapisywania ich w DOM).