
Java efektivně - 57 rad softwarového experta
V letošním roce připravila Grada pro českou komunitu javových vývojářů
překlad titulu Joshua Blocha: Effective Java - Programming Language
Guide. Důvodem, proč jsem si knihu okamžitě koupil, bylo to, že ačkoliv
s Javou pracuji již několik let, myslím že jeden z autorů základních
balíků Javy mě má rozhodně co říci. Kniha slibuje být souhrnem
správných i odstrašujících příkladů a zdůvodnění proč něco bude
fungovat špatně či vůbec ne. V knize obsažených 57 rad je rozčleněno
do deseti kapitol. Od čtenáře se očekává, že má s Javou má alespoň
základní zkušenost.
První kapitola Vytváření a rušení objektů radí při používání
factory (továrních) metod, návrhového vzoru singleton (zde přeloženo
jako "jedináček") a v neposlední řadě varuje před zbytečným a
nesprávným použitím finalizátorů.
V druhé kapitole Metody společné všem objektům se autor podrobně
zabývá metodami základní třídy Object a jak je správně překrývat.
Stejně jako první kapitola i tato má za cíl napravovat "začátečnické"
chyby.
V kapitole Třídy a rozhraní nejde jen o Javu, ale i o obecnější
objektový návrh. Jsou zde diskutovány otázky přístupnosti tříd a jejich
členů, neměnitelných tříd, otázka volby mezi skládáním a děděním a mezi
použitím rozhraní a abstraktní třídy.
Jak napovídá název další kapitoly Náhrady konstrukcí jazyka C,
čtenář zde nalezne jak v Javě implementovat "obstarožní" (céčkaři
prominou :-)) céčkové konstrukce jako struktury, sjednocení, výčtové
typy a ukazatele na funkce. Velká pozornost je věnována správné
implementaci bezpečných výčtových typů. Rozhodně zaslouženě. Spousta
javistů totiž stále ráda píše:
public static final int HODNOTA_1 = 0;
public static final int HODNOTA_2 = 1;
místo aby vytvořili speciální třídu a její různé instance přiřadily
konstantám HODNOTA_1,2...
Další tři kapitoly opět zasahují do softwarového inženýrství a rady
v nich obsažené neplatí jen pro Javu. Jsou to kapitoly Metody,
Obecné programování a Výjimky.Některé názvy rad mohou
znít trochu lapidárně, třeba "Optimalizujte rozumně" či "Neignorujte
výjimky", avšak oprávněnost těchto rad je asi podložena autorovými
špatnými zkušenostmi s cizím kódem. Třeba na začátku rady "Používejte
výjimky pouze pro výjimečné podmínky" je (souhlasím s autorem, že
v skutku úděsný) příklad ukončení cyklu pro průchod polem vyhozením
výjimky. Ideou této rady je nezneužívat výjimek k řízení toku a API
navrhovat tak, aby šlo předcházet vzniku výjimky testováním, zda lze
nějakou metodu korektně vyvolat. Za příklad slouží metody
hasNext() a next() rozhraní
Iterator a výjimka NoSuchElementException.
Pokud myslíte, že předchozí se vás netýká, tak - ruku na srdce - co
rady "Minimalizujte obor platnosti lokálních proměnných" nebo
"Vracejte pole nulové délky a nikoliv null"? U těchto rad je pěkně
demonstrováno, jak lze jejich nedodržením zavést chyby a zbytečně
komplikovat kód. A to nejen vlastní, ale i kód uživatele našeho API.
Předposlední kapitola pojednává o vláknech a začíná vyvrácením
mýtu, že synchronizace v Javě slouží pouze pro vzájemné vyloučení.
Čtenář je také důrazně varován před psaním aplikace pro určitý
konkrétní plánovač vláken, protože politika přepínání vláken není
součástí specifikace Javy a na různých implementacích se může lišit.
Posledních pět rad knihy tvoří kapitolu Serializace. Nejprve
je podrobně diskutována otázka, kdy má třída rozhraní Serializable
implementovat, a dále, zda použít vlastní serializovanou formu. Autor
rozebírá klady i zápory všech možností. Stejně jako v předchozím textu,
i zde je průvodní ideou zajištění bezpečnosti a kompatibility.
Vedle kvalitního věcného obsahu rad musím pozitivně zhodnotit i jejich
počet. Rad je "tolik, kolik jich vyšlo" (57), nikoliv nějaké kulaté
číslo, třeba 99 či 999, takže v knize nenajdete žádné "vatové" či
příliš akademické rady. Průměrná délka rady je 3,5 stránky (nejdelší
má stránek deset) a prakticky každá je demonstrována fragmenty kódu.
Další výhodou, a opravdu to považuji za výhodu, je to že kniha pokrývá
jazyk Javy (případně balíky java.lang a
java.util) a její principy, nikoliv desítky balíků a mnoha
tříd v nich. Kniha tak není tlustou "nečtivou" sbírkou tisíce rad,
které ani nemusíte potřebovat, ale dá se přečíst skoro jako román.
Závěrem se chci pozastavit u kvality českého překladu. Protože jsem
zvyklý i při komunikaci s českými kolegy používat anglické termíny
(byť někdy trochu "počeštěné"), zaujal mě hned v radě číslo jedna
překlad tovární metoda (factory method). Možná je to
v tomto případě jen můj nezvyk (ovšem jak by se přeložil refactoring?
:-)). Nevím však, zda bylo nutné překládat singleton na
jedináček. Ale budiž. Když jsem se však dále v radě číslo
jedna (str. 16, poslední odstavec) dočetl, že: "Třída může mít jen
jediný konstruktor s daným podpisem.", začal jsem horečně
přemýšlet o jaké (snad digitální) podepisování zde jde. Ale chyba
lávky. Podpis zde pochází ze signature, pro což programátoři
v češtině snad nepoužívají nic jiného než signatura či hlavička
(konstruktoru/metody/funkce). Podle mě tedy překladatel nebyl
s používanou terminologií příliš dobře obeznámen. Mému jazykovému
cítění se trochu příčil i často používaný tvar komparativu
"zabezpečenější". Z jiného jazyka než českého mi také připadla
věta (rada 37): "Snažte se vyhýbat rozhodnutím návrhu, která
omezují výkonnost". Není na vině, že překladatel Karel Voráček
byl zároveň sám sobě odpovědným redaktorem.?
Představená kniha splňuje co slibuje. Není sice ani učebnicí
softwarového inženýrství, návrhových vzorů ani vícevláknového
programování v Javě, ale poskytuje množství dobře napsaných
srozumitelných rad od člověka, který navrhl a implementoval
část API Javy. Tato kniha rozhodně patří na stůl každého
(současného i budoucího) profesionála.
Java efektivně. 57 rad softwarového experta. J. Bloch. Grada
Publishing, 2002. 232 černobílých stran. ISBN 80-247-0416-1.
Doporučená cena 290 Kč.
| Hodnocení: |  |
|