Portál AbcLinuxu, 3. května 2024 16:36
Proč právě Java?
Články
-
Proč právě Java?
V minulém díle jste se dočetli, proč jsem přešel od PHP. Dnes se dovíte, proč
jsem zvolil Javu.
Hlavní důvod, proč jsem zvolil Javu, byl veskrze praktický - pracuji s ní
totiž každý den. Proč bych se měl učit něco jiného, když Java mi poskytuje vše
potřebné? Pokud jste v něčem dobří, používejte to. Nemá smysl přecházet na
nějaký jiný jazyk jen proto, že je to zrovna módní. Důležité jsou jen dvě věci:
- vaše produktivita
- kvalita kódu
Produktivita znamená, jak rychle dokážete přidat nové vlastnosti či funkce. K
čemu vám bude sebelepší knihovna, když s ní neumíte pracovat? Pro mně se
takovou černou můrou stal
Webwork. Jedná se o velmi
hezkou knihovnu poskytující pull verzi Model-View-Controller architektury, ale
nedokázal jsem v ní vytvořit ani tu nejjednodušší stránku. Ztratil jsem při
jejím učení a experimentech nejméně týden. Takže než přejdete k něčemu novému,
ujistěte se, že to stojí za to.
Základem každého projektu je kvalita kódu. Sebelepší design je zhacen,
pokud programátor píše hrozně. A naopak, ani nejlepší profík nezachrání špatně
navržený design. Kód musí být přehledný, snadno čitelný a rozdělen do logicky
souvisejících celků. Pokud budete psát kvalitní kód, ušetříte si spoustu času
při ladění kódu, hledání chyb a přidávání nových vlastností.
Naprosto zásadním požadavkem je dokumentace. I když píšete jen pro sebe.
Nevěříte? Zkuste se podívat někam doprostřed delšího souboru u projektu, který
jste rok neviděli? Jak dlouho vám potrvá, než pochopíte, jaký má ta část účel a
s čím je propojena? Ja vím, je to hrozně těžké, zláště když vás tlačí termín.
Jenže minuta dokumentace vám ušetří deset minut při pozdější údržbě.
Java mi nabízí dobré podmínky pro splnění těchto požadavků. Ve svém jádře
obsahuje několik stovek tříd s podporou všech zásadních funkcí, které
programátor potřebuje. Ať už jsou to seznamy, mapy, práce s kalendářem, se
soubory, se sokety, s databází, s řetězci, uživatelské rozhraní a tak bych mohl
dlouho pokračovat.
Sun si dává záležet na čistotě jazyka, takže vývoj v Javě je intuitivní. Díky
hezky navržené hierachii tříd se spousta věcí programuje stejně. Například
takový InputStream
. Hlavními metodami jsou read()
a close()
. Použití je snadné. Naučíte se s nimi pracovat třeba při
čtení ze standardního vstupu. Později začnete pracovat se soubory a ejhle -
rozhraní je stejné. Až se dostanete k soketům či komprimovaným archivům, opět
použijete stejné metody a nemusíte se učit nic nového. Takhle je to v Javě se
vším - čistota designu a produktivita práce jsou na prvním místě.
Asi bych se měl zmínit i o dalších aspektech jazyka, které zvyšují efektivitu
programátora.
- Striktní pojetí jazyka. Pokud bych parafrázoval reklamu, pak co je v Cečku
povoleno, to je v Javě zakázáno. Na jedné straně se můžete cítit svázáni
regulemi jazyka, jenže postupem času zjistíte, že tvůrci jazyka pro to měli
dobrý důvod. Java vám nedovolí udělat některé chyby z nepozornosti, tak typické
pro C/C++. Spoustu chyb odhalí již při kompilaci. A to je lepší, než když
spadne družice kvůli překlepu.
- Žádné ukazatele. Nemusíte si pamatovat, kdy použít referenci a kdy
dereferenci. Pointery jsou danajským darem pro Cečko. Na jedné straně díky ním
můžete psát maximálně efektivní kód, na druhé straně snad polovina chyb pramení
z jejich špatného použití. Všechny ty neoprávněné přístupy do paměti či
SIGSEGVy kvůli špatné pointerové matematice jsou v Javě nemožné. Každá proměnná
buď odkazuje na platný objekt správného typu nebo je rovna
null
.
Inicializované pole obsahuje položku length
. A pokud si přesto
nedáváte pozor a použijete neexistující prvek, vyskočí
NullPointerException
či ArrayIndexOutOfBoundsException
.
-
Nutnost přetypovat čísla při ztrátě přesnosti. Například pokud přiřazujete
int
do byte
. Céčko vám díky automatické konverzi vezme
cokoliv, Java si vyžádá potvrzení vašeho úmyslu byte b = (byte)i;
.
Zdá se vám to zbytečná buzerace? V 80% případů potvrdím svůj úmysl doplnění
přetypování, ale ve zbylé pětině se zarazím a změním typ deklarované proměnné. A
děsím se představy, za jakých okolností by se tato chyba projevila.
- V podmínkách musí být jen logické výrazy. Céčko sice díky předpokladu, že
nula je
false
a vše ostatní je true
, umožní
programátoru neskutečné optimalizace a kejkle, ale zároveň i příšerné chyby.
Například tento nekonečný cyklus je v Céčku platný, v Javě jej zamítne už
kompilátor:
int i = 2, j = 2;
while ( i=j ) i++;
Pro méně pozorné, programátor zapomněl jedno rovnítko, takže se z testu
rovnosti stalo přiřazení nenulové hodnoty. A to v Cečku nabývá vždy hodnoty
true
. Kompilátor Javy by našel číselný výraz na místě, kde
očekával výraz logický a odmítl by pokračovat.
- Vyjímky zásadně zjednodušují řešení chybových stavů a zpřehledňují
zdrojový kód. Například programujete odmocninu celých čísel. V Cečku byste
museli pro záporná čísla buď vracet hodnotu rezervovanou pro chybu či
nastavovat globální proměnnou (typicky
errno
). A pak spoléhat na
to, že programátor nezapomene ji otestovat. V Javě prostě hned na začátku při
testu platnosti vstupních dat vyhodíte vyjímku a i kdyby ji programátor
ignoroval, za běhu programu je možné zjistit, v které části (či dokonce na
kterém řádku) je chyba.
- Dědičnost a garbage collector. Každý objekt v Javě je potomkem třídy
Object
. Hierarchie tříd proto tvoří stromovou strukturu. Díky tomu
je snadné napsat metodu, jejímž parametrem může být libovolný objekt. Šablony z
C++ se mohou zahrabat hanbou! Java nepodporuje vícenásobnou dědičnost, ale
rozhraní jsou dostatečnou náhradou této obtížné vlastnosti. Opět vás to přinutí
psát čistší kód. A automatický garbage collector je rájem pro zapomnětlivce,
kteří zapomínali volat destruktor v C++ a zahltili tak volnou paměť. Pravda,
implementace by mohla být efektivnější, ale koncept je výborný.
-
Javadoc. Psát dokumentaci je díky němu opravdu snadné. Hned jak nadeklarujete
metodu, měli byste k ní ihned napsat dokumentaci. Později příkazem
javadoc
lze extrahovat veškerou dokumentaci do podoby html.
Výše zmíněné vlastnosti jazyka umožňují psát přehledný kód, který neobsahuje
některé třídy chyb z nepozornosti. Pokud budete psát v Javě, sníží se nepoměr
mezi časem potřebný k napsání aplikace a laděním-údržbou. Java vám dává
okamžitě k dispozici obrovské množství knihoven a zároveň vás brzdí při psaní
chyb.
A pak je tu ještě jeden aspekt. Pro Javu existuje spousta Open Source knihoven.
Pokud potřebujete něco naprogramovat, je dobré se porozhlédnout po internetu,
zda vás někdo nepředběhl. Pokud programujete webové aplikace, podívejte se na
Jakartu. Jedná se o kolekci
nejrůznějších knihoven a frameworků napsaných v Javě. Mezi ně patří referenční
implementace servletů Tomcat, knihovna pro práci s XML Xerces či nádherná
knihovna pro logování Log4J.
Pro snadné testování kvality kódu je k dispozici framework
JUnit. Bez kvalitních unit testů by neměl jít
žádný softwarový produkt do reálného provozu. Unit testy by měly vznikat již
během psaní kódu, raději však ještě dříve. Viz Extreme Programming.
Nepostradatelným pomocníkem každého programátora v Javě je Ant. Ant opět patří
do rodiny open source projektů hostovaných na Jakartě. Ant je obdobou make, ale
rozdíl mezi nimi je asi jako mezi trakařem a moderní dodávkou. Konfigurace
probíhá skrze XML a je docela přehledná. Ant obsahuje desítky zabudovaných
funkcí, další jsou dostupné ve volitelném balíčku. Základními funkcemi jsou
například kompilace, manipulace se souborovým systémem (copy, mkdir, delete),
práce s komprimovanými archívy (zip, jar, arj, gzip, tar) či CVS. Mezi
volitelnými funkcemi najdete FTP, podpora .NET, JUnit či práce s archivy RPM
a CAB.
Další články z této rubriky
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.