2012. március 10., szombat

Kódszépítés

A szakdolim fejlesztése során kitaláltam egy kis technikát, hogyan lehetne rövidebb és (számomra) esztétikusabb a kódom. Ott a JavaFX Label osztályával csináltam meg az alábbi trükköt, most általánosan írom le.

Ha van egy ilyen jellegű dolog:
Valami v = new Valami();
v.setA(1);
v.setB("akarmi");
v.setC(true);

Meg lehet csinálni azt, hogy származtatod az osztályt, beburkolod a függvényeket úgy, hogy meghívják az ősben levő függvényt, majd visszaadják az objektumot:
public class ValamiEx extends Valami {

    // konstruktorokat is le kell másolni, bennük super(...); hívással

    public ValamiEx setA(int i) {
        super.setA(i);
        return this;
    }

    public ValamiEx setB(String s) {
        super.setB(s);
        return this;
    }

    public ValamiEx setC(boolean b) {
        super.setC(b);
        return this;
    }
}

Ezzel a megoldással már a fenti kód le is rövidül:
Valami v = new ValamiEx().setA(1).setB("akarmi").setC(true);

Ezt a mintát alkalmazva egy Label objektum esetén akár egy sorban beállítható minden formázás:
Label label1 = new LabelEx("Hello LabelEx!").bold().italic().center(); // stb.

Szerintem legalábbis ez így esztétikusabb. :-)