Boilerplate alapvetoen szukseges
Nem szükséges, a boilerplate magyarul a felesleges körítést jelenti. Ami nem szükséges, azt miért jó megadni? Csak többet kell gépelni vagy generáltatni és többet is kell olvasni és nehezebb megérteni is. Ha nincs boilerplate az azt jelenti, hogy ugyanazt a működést meg tudod adni tömören. Csak az van ott, ami szükséges, hogy ott legyen, semmi több.
venkat-ot ismerem, tobbszor is szemelyesen ultem az eloadasan
vs
En vagyok az, aki a POJO-knal siman public-ra tette a field-eket es kihagyta a getter/setter-t, mert hulyeseg, csak feleslegesen nehezebben olvashatova teszi a kodot.
Jobban kellett volna figyelni az előadásaira. Semmivel sem nehezebben olvasható a
rectangle.height = 15;
return rectangle.height * rectangle.width;
mint az
rectangle.setHeight(15);
return rectangle.getHeight() * rectangle.getWidth();
Semmivel sem nehezebben érthető az egyik, mint a másik, miközben nem ugyanaz a funkcionalitása. Ahol van get/set, ott úgy tudod megváltoztatni az objektumodat, hogy ne kelljen a program más részeibe belenyúlni.
Ez is jó példa egyébként a boilerplate-re.
Azért hagyod el, mert felesleges körítés, de Javaban nem hagyhatod el anélkül, hogy ne változna meg a funkcionalitás. Jó volna egy olyan nyelv, ahol nem kell megadni, de mégis ugyanaz marad a funkcionalitás! ;-)
case class Rectangle(var width, var height)
Ez ugyanazt a funkcionalitást nyújtja, mint egy sima class, ahol meg vannak adva a get/set, hashCode, equals, toString metódusok. Így át is tudod írni ezeket később, ha akarod. Viszont ebben nincsenek benne a fenti körítések. Azokat csak akkor kell megadni, ha át akarod írni azokat.
Abból is látszik, hogy nem figyeltél Venkatra eléggé, mert a rövidebb kód az nem (feltétlen) egyszerűbb, ahogy a fenti sem, a get/set-ek elhagyása. Javaban pl. a final megadása egyszerűsít a kódon, miközben egy felesleges boilerplate, annak kellene lennie a defaultnak.
Egyébként a POJO osztályod immutable-re alakítása viszont egyszerűbb lesz.