Bár a megfelelő elnevezések használata csak kis részét jelenti a refactoring ajánlásainak, kiemelt figyelmet igényel a problémakörnek a megvitatása.
Különösen akkor érdemes erre odafigyelni, ha többen dolgozunk ugyanazzal a kóddal, vagy többször felhasználható osztály készítése a cél.
A legfontosabb igény a helyes elnevezésekkel kapcsolatban, hogy az olvasó gyorsan felismerje a kód feladatát. A megértés helyett a konkrét feladatra tudjon koncentrálni.
Használjunk egyértelmű, beszédes neveket, ami alapján nyilvánvaló, hogy az adott változó mit tárol, a metódus mit csinál, az osztály mihez tartozik. (Kerüljük ugyanakkor a szószátyár elnevezéseket, mint ahogy a néhány karaktereseket is. )
Egy jól megválasztott név olykor szükségtelenné is teheti a kód kommentezését. (Ha egy forrásban sok kommentet látunk, akkor valószínűleg refaktorálásra van szükség.)
Az elnevezésekben javasolt az angol nyelv használata. (Kezdő programozóként magam is magyar elnevezéseket használtam. Azt gondolom, ez nem baj… sőt. A kezdő programozó így nagyobb figyelmet fordíthat az alapok elsajátítására az angol nyelv tanulása helyett.)
A forrásban az üzleti logikának megfelelő elnevezéseket használjuk, legyenek összhangban a forrás és a specifikáció megnevezései.
Ennek megfelelően az üzleti logikát alkotó folyamatok, funkciók alapján alkossuk meg az elnevezéseket.
Az addElement( Member $element ) helyett alkalmazzuk az addMember( Member $member ) definíciót, ha mondjuk egy könyvtári nyilvántartást írunk, és új tag íratkozik be.
Az elnevezések hossza
Azon túl, hogy az elnevezések beszédesek legyenek, hosszuk is fontos.
A legegyszerűbb, gyakran meghívandó metódusokat, változókat rövid elnevezéssel lássuk el – könnyebb őket megjegyezni. A ritkábban használt, összetettebb metódusok, változók kapjanak hosszabb nevet.
A publikus metódusok rövidebb, a protected, illetve a private metódusok hosszabb nevet kaphatnak.
Magyar jelölés (Hungarian Notation)
Típustalan nyelvek esetében – mint a PHP is -, nem javaslom.
Változó adatstruktúrájának jelölése – a magyar jelölés helyett
Alkalmazzunk a névben az adatszerkezetre utaló megnevezést.
Pl. tömböt tartalmazó változók esetében a „List” utótagot szoktam javasolni. A könyvtári példánál maradva a $memberList változó Member példányokat tároló lista.
(A javaslatot a metódusok elnevezése során is általánosan tudjuk alkalmazni: a getMemberList() metódus array-t ad vissza, amiben Member példányok vannak.)
Többes szám az elnevezésben
Nem javaslom: félrevezető lehet. Ha pl. egy tömbnek csak egy elem van, feleslegesnek tűnik a többes szám használata. Ráadásul meggyűlhet a bajunk a rendhagyó többes számokkal is, mint a shelf – shelves (polc - polcok) esetében.
Használjunk egyes számot mindenhol. Ha több elemünk van, használjuk a „List”, vagy az adatstruktúrára utaló egyéb szót az elnevezésben.
(Az egyes szám használata igaz az adatbázis tábla- és mezőnevekre is.)
Néhány karakteres elnevezések
Amennyiben az üzleti logika azt követeli meg, használhatunk egy-két karakteres elnevezéseket is, ha az adott környezetben egyértelmű a használatuk.
Ebben az esetben a for ciklus segédváltozóját nem sok értelme van komolyabban elnevezni:
for( $i = 1; $i <= $numberOfMember; $i++ )
{
...
}
setter, getter
Az értékadó, és értéklekérdező metódusok esetében bevált a set, get prefixek használata: getMember(), setMember( Member $member ).
(A metódusok neve legyen összhangban az adattagok elnevezésével. A fenti példa alapján az adattag neve member legyen.)
Az értékadó, 1, vagy néhány soros metódusoknál a $value használata javasolt:
public function setMember( Member $value ) {
$this -> _member = $value;
}
Paraméterként itt $member nevű változót is fogadhatnánk, de több adattag / setter esetében minden egyes metódust egyenként, egyedi változó elnevezéssel létrehozni felesleges pluszmunka. A kód rövidsége miatt a metódus feladata áttekinthető, használata, célja világos, így a $value elnevezés egyértelmű.
Elnevezési hierarchia
Az elnevezésekben szereplő részszavak között egyértelmű hierarchikus sorrend legyen.
(Mivel a hierarchiát az üzleti logika diktálja, az elnevezésekre általános szabályt nem lehet adni, alkalmazkodni kell a projekt követelményeihez.)
Az elnevezés első része a legmagasabb hierarchia szerinti elem elnevezése legyen, majd ezt kövesse, az egyel mélyebb szinten lévő, és így tovább.
Vegyük a könyvtáros példát, a Member osztályt. A taghoz nevet kell rögzíteni. Kell vezetéknév (last) és keresztnév (first).
A hierarchia szerint, első szinten nevet (name) kezelünk. A következő szinten vezetéknév és keresztnév van, ezek egyenrangúak.
Így a változók elnevezése: nameFirst, és nameLast.
(A kód kiegészítést (code completition) alkalmazó kódszerkesztőkben a „name” szó begépelése után megjelennek a nevekhez tartozó változók, metódusok, osztályok, sőt még a konstansok is. Hosszabb elnevezéseknél így a hierarchiában egyre mélyebben lévő elemeket is könnyen megtaláljuk, valamint a metódusok listájában az egymáshoz hasonló funkciót adókat egymás után találjuk.)
A hierarchia szerinti névadás alkalmazható az adatbázis táblák (pl.: name_last, name_first), metódusok elnevezéseiben is (getNameLast(), getNameFirst(), setNameLast( $value ), setNameFirst( $value )).
A könyvtáros példa alapján: book a könyvek, book_Author a szerzőket kezelő osztály neve, ezzel szinkronban, az adatbázistáblák nevei: book, book_author.
A fent leírtak ajánlások, és csak kiindulásnak elegendőek.
Annak érdekében, hogy a refaktoring ajánlásait rutinszerűen tudjuk alkalmazni, javasolt a kollégákat előre felkészíteni a csapatmunkára, és a közös „nyelv” használatára, az utólagos refaktorálás ugyanis mindig több erőforrást igényel.