Szomszédot lenyűgöző pixeles fénypanel vezérlő szoftver készítése.
Lehet nem végeztem még elegendő katát. Lehet ez a természetes. Meglepett, hogy a megoldó leírásban szó sincs arról, hogy hozzál létre kiegészítő osztályokat a feladat végrehajtásához, míg az elsődleges osztály esetén erre kitér a szerző. A bemutatott kódban minden ismertetés nélkül megjelenik az ismeretlen osztály ismeretlen metódusára való hivatkozás. Bevallom feltúrtam a netet, biztosan létezik ilyen, csak én nem ismerem. Idővel rájöttem, ennek a létrehozása is a feladat része. Ezután már nem lesz meglepő, ha belefutok ilyenbe. A dolog érdekessége, hogy később ennek a kiegészítő osztálynak a bővítése re-fraktorálása már megjelenik az útmutatóban. Továbbá a másik segéd osztály létrehozására kapunk utasítást.
Néhány sarokpont:
- A panelt a kódban reprezentáló két dimenziós tömböt TDD nélkül már az osztály kezdeti létrehozásakor definiálnánk. A TDD elveit követve ez csak akkor következik, be amikor először szükség van a panel egy “pixelére”.
- Hasonló a helyzet a pixelt reprezentáló Light osztály státuszát (bekapcsoltságát) jelző változó esetén. Akkor hozzuk létre amikor először kell hivatkozni rá.
- A lambda kifejezések okán ismertem a FunctionalInterface fogalmát, ebben a körben való használatát. Most számomra ismeretlen használatát tanulhattam meg.
- A panel meghatározott területeinek “on”, “off” és “toggle” kapcsolására egy-egy formailag azonos metódus szolgál. Melyek dupla ciklus belsejében hívják meg a Light objektum vonatkozó metódusát. Kiemelésre került a dupla ciklus egy olyan metódusba, melynek egyik paraméter Consumer<Light>. Híváskor ebbe a paraméterbe kerül átadásra a végrehajtandó műveletet megvalósító metódus hivatkozás, Light::turnOn. Részletesebben:
public void turnOn(CoordinatePair coordinatePair) {
eachLight(coordinatePair, Light::turnOn);
}
public void eachLight(CoordinatePair coordinatePair, Consumer<Light> consumer) {
...
}
- Ezt a megoldást igen “szellmesnek” találom. E nélkül a formailag azonos metódusok egységesítése most csak valamilyen elágaztatási megoldás jut eszembe. Azt pedig a Clean Code elvek szerint ellenjavallt.
Ez is olyan gyakorlat amely során aha élményem volt.