Przemyślałbym kwestię nazewnictwa. Nazwa metody powinna mieć formę czasownikową i mieć wydźwięk komendy, wyjaśniającej, jaki będzie efekt heh wywołania (np. printLine
). Ewentualnie zapytania, wyjaśniającego, jaka wartość zostanie zwrócona (np. getPassword
). Twoje metody nazywają się zaś np. newComponents
albo isEmpty
. Ta druga miałaby jak najbardziej sens, gdyby należała do tej drugiej grupy i zwracała wartość (tzn. odpowiadała, czy coś rzeczywiście jest empty). Tak jednak nie jest, a jako komenda nie ma sensu.
Taki kod jest trudny do zrozumienia. To tak, jakbym zostawił na lodówkę kartkę, przypominającą mi o zadaniach na dziś, i pisał np. tylko "pies". Ja pamiętam, o co mi chodziło, ale żona mogłaby już nie wiedzieć, czy miałem na myśli, że trzeba go wykąpać, wziąć do weterynarza, nakarmić czy wyprowadzić.
Warto by też położyć większy nacisk na logikę i zwięzłość:
if (word.getPassword().length == 0) {
play.setEnabled(false);
} else if(word.getPassword().length != 0) {
play.setEnabled(true);
}
word.getPassword()
nie może mieć równocześnie długości 0 i innej niż 0. Nie trzeba zatem dwa razy sprawdzać tego samego - chyba, że nie wiemy, co robi else
.
Wystarczyłoby:
if (word.getPassword().length == 0) {
play.setEnabled(false);
} else {
play.setEnabled(true);
}
Ale przecież skoro przekazywana do setEnabled
wartość jest wprost zależna od wartości warunku, który sprawdzamy, to wystarczyłoby całą tę konstrukcję zwinąć do jednej linii i zapisać po prostu tak:
play.setEnabled(word.getPassword().length > 0);
Ewentualnie, dla większej czytelności:
boolean wordNotEmpty = word.getPassword().length > 0;
play.setEnabled(wordNotEmpty);
Ogólnie wydaje mi się, że następną umiejętnością, o jaką powinieneś się pokusić, jest unikanie duplikowania kodu. Jeśli programujemy za pomocą techniki kopiuj-wklej, to znaczy, że coś robimy nie tak. Postawiłbym sobie na twoim miejscu zadanie następujące - metody newEasyGame
, newMediumGame
i newHardGame
są prawie w 100% identyczne. Należałoby zredukować je do jednej metody startGame
, która obejmowałaby kod wspólny dla tych trzech metod - a to, czym te metody się różniły, przekazywać do tej uwspólnionej za pomocą parametrów.
PS. Nie rozumiem także potrzeby używania zbędnych nawiasów, np. czemu (Main.health) = 5
zamiast po prostu Main.health = 5
. To oczywiście drobiazg