Ismét egy olyan problémát veszek elő, ami miatt nehezebb lehet a kód olvasása, az algoritmus megértése.
Ez pedig az, ha az elnevezés, a típus és az érték nincs szinkronban egymással.
Vagyis ha az elnevezésben van utalás a tárolt/visszaadott érték típusára, akkor az legyen szinkronban a valódi tárolt típussal, értékkel.
A $numberOfBook változó esetében például minden bizonnyal szám-értéket tárolunk, és reméljük, hogy a változó típusa is valamilyen numerikus típus. (További példák: $countOf..., $quantity..., ...)
Ugyanez igaz a metódusokra is: getNumberOf..., getCountOf..., getQuantity..., stb.
Mindegyik esetben szám értéket várunk.
A probléma
Ha az elnevezés-típus-érték közül valamelyik nincs szinkronban a másik kettővel, nehezebb az algoritmus megértése, illetve a további felhasználás is problémás lehet.
Típusos nyelvek esetében ugyan könnyebb a dolgunk, de ott is gondot okozhat a rossz elnevezés használata.
Típustalan nyelveknél - mint pl. a PHP is -, figyelnünk kell erre a problémára.
Ahogy egy korábbi bejegyzésben is említettem (lásd: Elnevezési ajánlások: Magyar jelölés), a típus-jelölésre használatos magyar módszer nálunk nem vált be, nem alkalmazzuk. (Emiatt más, egyszerű ajánlásokat érdemes tenni.)
A változó minden esetben az elnevezésnek megfelelő értéket tároljon.
- A fenti példában szereplő: $numberOf..., $quantity, stb. esetében egyértelműen számot.
- A $name, $nameLast, stb. esete is egyértelmű: string.
- Tömb estében a "List" utótagot szoktam javasolni, pl.: $personList (ha Person objektumok listáját tároljuk), $itemList (ha termékek listájáról beszélünk).
- stb.
(Amennyiben az üzleti logika szerint a lista maga magasabban van a hierarchiában, mint az, amit tárol - lásd Elnevezési ajánlások: Elnevezési hierarchia -, akkor a $listItem, $listPerson, stb. elnevezés javasolt.)
Példa
Ismét egy könyvtári példát előhozva: tegyük fel, hogy a store::getNumberOfBook( $book ) metódus egy adott könyvből a könyvtár rendelkezésére álló darabszámot kapjuk meg.
Az üzleti logikát tekintve (és a józan ész szerint is) numerikus, egész értéket várunk, ami nulla, vagy annál nagyobb érték kell, hogy legyen.
Tegyük fel, hogy a könyvek számát meg kívánjuk jeleníteni a felületen.
echo store::getNumberOfBook( $book );
A 0 érték helyett - vagyis, amikor egy könyvből nincs a könyvtárnak példánya -, szerencsés lenne, ha valami beszédesebbet írnánk ki, pl.: "Nincs példányunk belőle.", egyéb esetben pedig pl. "3 db".
Erre akár megfelelhetne a getNumberOfBook metódus átalakítása is, de egyrészt nem lehetünk benne biztosak, hogy a kód más részeiben ez nem okozhat-e problémát, illetve az új viselkedés miatt a getNumberOfBook elnevezés sem fedi le teljesen, amit a metódus végezne.
A legjobb megoldás ismét az, hogy egy új metódus bevezetésével elégítjük ki az új igényt:
class store {
...
function getNumberOfBookView( $book )
{
$numberOfBook = store::getNumberOfBook( $book );
if( 0 < $numberOfBook ) {
return $numberOfBook." db";
} else {
return "Nincs példányunk belőle";
}
}
...
}
// A felületen pedig
echo store::getNumberOfBookToView( $book );
A névválasztásnál legyen egyértelmű, hogy a metódus milyen értéket ad vissza, ugyanakkor jelezzük, hogy miben tér el az eredeti metódustól.
Emiatt is érdemes a "további" viselkedésre utaló jelzést a metódus-név - eleje helyett -, a végéhez tenni, mivel ez a getNumberOfBook metódusra épül.
A fentiek természetesen ismét csak ajánlások, így nem feltétlenül ezek a legjobb módszerek.
Akárhogy is, ha csapatban fejlesztünk közös standard alapján dolgozzunk.