Opravdový pamětník vývoje Delphi si jistě vybaví problémy se sudými verzemi tohoto nástroje. Při testování šesté verze vše ovšem nasvědčuje tomu, že Borland tomuto prokletí neunikl. Ale nepředbíhejme.
Dodávka a instalace
Delphi 6 se podobně jako předchozí verze dodává ve třech baleních:
Standard, Professional a Enterprise přičemž na recenzi jsem měl k dispozici
poslední uvedené. Kromě vlastního CD s produktem je zde Companion Tools CD
s dalšími komponentami, nástroji a informacemi od třetích stran. Oproti
Delphi 5 zde nejsou CD ostatních produktů společnosti Borland. Že by se to
neosvědčilo? Posledními obyvateli krabice jsou tři knihy (Quick Start,
Language Guide a Developer's Guide) a hierarchický strom komponent Delphi
i Kylixu (resp. VCL a CLX). Také je důležité zmínit, že naštěstí
nestačilo dojít k naprostému nesmyslu chránění CD proti kopírování.
Piráti si vždy cestu najdou (dříve či ještě dříve) a platící
uživatel nemá možnost udělat si záložní kopii, na kterou má právo.
Instalace pomocí Windows Installeru je bezproblémová, navíc s výraznou
novinkou. Již není potřeba pro každého uživatele jednoho PC provádět
znovu a znovu instalaci (byť pouze zápisem do registrů) jak bylo nutné
u předchozí verze, ale Delphi vše zařídí při prvním spuštění
v novém profilu za vás. Smutná je ovšem skutečnost, že produkt nepochopí
cestu, kam má produkt nainstalovat a sebere si i pár megabajtů ze
systémového disku, což je krajně nevychované a v dnešní době bych si to
dovolil považovat dokonce za vulgární. Aplikační specifikace pro Windows
2000 je zřejmě pro vývojáře komediálním cárem elektronického smetí
(to ovšem neplatí jen pro Borland).
Novinky v prostředí, nové komponenty
Zřejmě první,
čeho si všimnete, je Inspektor objektů. Pokud jste pracovali s dřívější
verzí, pak víte, že například zobrazení dat z databáze v datové
mřížce znamenalo vždy nastavit jednu vlastnost typu objekt (zdroj dat, tomu
zase množinu a množině SQL dotaz a připojení a …). To znamenalo
neustálé přepínání mezi komponentami, které bylo o to horší, pokud
jste je měli rozmístěné po různých datových modulech. Tomu je konec. Vše
lze nastavit rychleji díky možnosti rozbalit si vlastnosti přiřazené
komponenty. Na obrázku Obrázek 2 vidíte přes komponentu TDBGrid možnost
nastavit ConnectionString právě přes TDataSource, TADODatSet a konečně
TADOConnection. Podobně jako u vlastností můžete takto zadávat
události.
Na uvedeném obrázku lze také vidět rozbalený seznam komponent na
formuláři: nově je uváděn typ u všech komponent, nikoliv jako dosud pouze
u vybrané.
Ale pojďme dál. Na řadě je paleta komponent. V novém vydání přibylo
větší množství komponent a nových vlastností u stávajících. Uvedu
zatím pouze některé, neboť ostatní si zaslouží popis uvedený dále
v textu. Záložka Additional obsahuje oproti předchozí verzi komponentu pro
výběr barev (TColorBox), pro zadávání textových hodnot v mřížce
(TValueListEditor), nebo výborné spojení vstupní řádky a popisky do jedné
komponenty (TLabeledEdit), ale hlavně nový manažer pro centralizaci akcí.
Kromě přidání dalších standardních akcí např. pro formátování textu,
ukládání souborů a další lze velmi jednoduše pomocí myši přetahovat
akce do „akčního menu“ (nová komponenta) či plovoucích nabídek.
K tomu všemu je přidán konfigurační dialog, který lze volat přímo
z aplikací a uživatel si může celé menu včetně nabídek upravit podle
sebe. Vše se pak můžete pomocí jedné metody uložit do souboru či zpětně
načíst. To ale není vše. Toto nové menu si například pamatuje četnost
používání příkazů a ty používanější dává více nahoru a opačně
případně je schovává podobně jako Office (osobně si ale myslím, že toto
je cesta do pekel).
Na chvíli se ještě zastavím u komponenty TValueListEditor (implementaci
lze již delší dobu vidět v menu Project, položka Options, záložka
Version Info). Představte si, že necháte uživatele editovat jak hodnoty, tak
klíče a ještě mu umožníte přidávat či odebírat jednotlivé řádky,
což je zcela běžná věc. Navíc potřebujete, aby klíč byla jednoznačná
hodnota. A teď přijde tragédie v ještě horší podobě než kterou
předvedl Will v Romeovi a Julii. Pokud uživatel omylem zadá klíč, který
již existuje, pak NELZE OBSLOUŽIT UDÁLOST TYPU OnKeyViolation, ALE DOJDE
K VYVOLÁNÍ VÝJIMKY. Ať se na mě nikdo nezlobí, ale tohle je
prasárna. Strávil jsem celé odpoledne a kus večera hloubáním na tím, jak
to ošetřit, ale kromě napsání vlastní komponenty (resp. úpravy
v dodaném zdrojovém souboru) jsem nenašel rozumnější cestu. Za zmínku
jistě stojí také obsluhy událostí OnValidate (která navíc není volána
vždy, když by měla) a OnSetEditText. Normálně uvažující vývojář by
v případě špatného textu potřeboval tento změnit. Ale Borland né.
Předává to jako konstantní hodnoty a programátore, snaž se.
Problémem předchozích verzí byla absence komponent pro procházení
adresářů a souborů na disku (nepoužitelné, uživatelsky odpudivé a
hlavně zastaralé komponenty ze záložky Win 3.1 nelze počítat). V Delphi
6 již k tomu komponenty jsou a pomocí nich lze během pár kliknutí
naprogramovat svého vlastního Průzkumníka. Ovšem při jejich použití jsem
narazil na neomluvitelný problém: pokud chcete při změnách na disku
automaticky tyto změny promítat do zobrazení (nastavení vlastnosti
AutoRefresh na True), pak komponenty vytvářejí na každém adresáři, který
označíte, vlákno, které na konci není uvolněno, takže můžete mít přes
sto šedesát vláken, což dokonce vede k pádu aplikace při jejím
ukončování (někdy i dříve). Chce se mi z toho brečet. Nepochopitelné
je i umístění těchto komponent na záložce Samples. Důvod vidím pouze
v tom, že se již nikomu nechtělo psát k tomu nápovědu. Podobně
rozšířené standardní komponenty jsou totiž například i již zmíněné
TValueListEditor či TColorBox. K těm nápověda je, proto jsou umístěny na
„hodnotnějších“ záložkách.
Pro vytváření internetových aplikací je ve verzích Professional a
Enterprise obsažen balík komponent Indy (sada komponent FastNet zůstala).
Můžete tak vytvářet internetové servery či klienty. Ne že by to dříve
nešlo, ale tímto máte k dispozici jednu „z dalších možností“,
která je v současnosti zřejmě nejoblíbenější. Pozor ovšem na některé
nectnosti, které mohou vyplynout z přenosu mezi platformami: portace těchto
komponent na Linuxu není zcela „košér“.
Změny v komponentách a prostředí
V krátkosti si ukažme změny
v komponentách známých i v dřívějších verzích (samozřejmě nelze
popsat všechny). TComboBox má nově vlastnost AutoComplete. V TMemo již
vlastnost Caret není pouze pro čtení, ale i pro zápis. TAction lze
přiřadit libovolné množství horkých kláves, takže již není potřeba
jako dříve vytvářet kvůli další horké klávese novou akci. Formulář
má nově kromě samovypovídající vlastnosti AutoSize další, které
umožňují definovat transparentní barvu a/nebo míru průhlednosti.
Nepochopil jsem, proč takovou specialitu, která se použije párkrát za
život, musí být vecpány sem. Zbytečně to zvětšuje výsledný kód. Když
už jsme u toho, tak databázová aplikace (používá se IBExpress)
přeložená v Delphi 5 mající cca 2 MB, v Delphi 6 již měla o cca
220 kB více.
TLabel byl obohacen o události
OnMouseEnter a OnMouseLeave. Proč to má jenom TLabel, je opět nad moje
chápání. Tyto události jsou občas potřeba i v jiných komponentách
(narozdíl např. od průhlednosti). Vlastnost PopupPoint vyskakovací menu byl
ze sekce protected přesunuta do sekce public, takže je
přístupný všem.
Další zastávka bude u ostatních částí uživatelského prostředí. Co
jsem nikdy nepochopil bylo standardně nezaškrtnuté políčko Undo After Save
v nastavení editoru. Nepochopení trvá dále. Automatický doplňovač kódu
se opět přiblížil ke stavu použitelnosti. Jednak jeho aktivace může
nastat již po 0.1 vteřině (konečně!) a jednak do tohoto nástroje pronikly
barvičky. Vlastnosti oddělené od metod a pod. krásně doplňuje to, že se
seznam možných doplnitelných věci filtruje v závislosti na tom, co je již
napsáno (např. máte-li již napsáno „sho“ u formuláře, pak v seznamu
zbude již jen to, co vidíte na obrázku Obrázek 1. Pokud se vám zdá toto
okno male či velké, můžete jeho velikost upravit podle potřeby. Použít
jej lze i v části interface jednotky. Kromě vlastního názvu u metod a
funkcí doplňuje i závorky, takže je nemusíte psát sami. Opět mi tu
chybí někde si nastavit, aby před otevírací závorku strčil mezeru. Je to
snad takový problém? Kompletace kódu ovšem stále nepracuje v některých
situacích, kde by to člověk čekal (např. když na nové řádce začínám
psát název metody/objektu atd., tak by mohl automaticky naskočit apod.). Snad
příště.
Pokud jste pracovali se skupinou projektů, pak po překladu všech se
aktivním stal ten projekt, který byl poslední v řadě. Tomu je již také
konec a aktivní projekt zůstává ten, který byl aktivním před
kompilací.
Novinek doznal i editor. Na přechod zpět po použití „Hot linku“ již
lze použít klávesnici. Pořadí otevřených souborů lze pomocí myši
upravit tak, aby vyhovoval vašim potřebám.
Při používání jsem se jednou zhrozil, že mi na paletě komponent
zmizelo velké množství komponent. Nakonec se ukázalo, že jsou vidět pouze
ty, které mají v daném kontextu smysl, tedy například pokud pracujete
s datovým modulem, neuvidíte vizuální komponenty. Zda je to dobré či
nikoliv ponechám na vás. Já osobně bych uvítal někde toto chování
zakázat.
Nově je tu také Object TreeView společně s diagramem. Podobně jako
u databázových komponent, kde jde od předchozí verze vytvářet diagramy
vztahů mezi komponentami, jde to nyní i pro ostatní komponenty. V okně
Object TreeView jsou komponenty uspořádány do stromů závislosti a lze je
přetahovat do diagramu. Tam pak lze vytvářet případné další vztahy.
Zkusil jsem tak přetáhnout vše, co jsem měl na formuláři (a že toho bylo
požehnaně) a čekal, co to udělá. Po cca 100 vteřinách se opravdu
vykreslilo to, co mělo, bohužel ale vše pod sebe (ať žije inteligentní
layout manager). Dokonce to došlo tak daleko, že v diagramu mající danou
maximální výšku jsem se nedostal na všechny prvky, protože byly moc
nízko. Navíc mě vadilo, že během zpracování IDE na nic nereagovalo,
takže když jsem se omylem pokusil o posunutí prvků, raději jsem nečekal,
prostředí odstřelil a spustil jej znovu. Tento diagram je na cvičné
použití pro pár komponent ještě použitelný, ale pro větší projekty ani
náhodou. Jediná možnost (kterou Delphi umí) je rozdělit si formulář na
více takových diagramu, ale než použít berli, raději budu kulhat.
Poslední užitečná novinka, kterou bych rád zmínil, se týká
přidávání unit do klauzule uses pomocí klávesové zkratku Alt+F11. To šlo
pouze u těch jednotek, které obsahovaly formulář, datový modul apod.
Bohužel to nešlo u ostatních jednotek. Tomu už je naštěstí konec, ale
pořád je tu jakési nepochopitelné omezení – stále lze takto přidávat
pouze jednotky z projektu, takže abyste dodali třeba SysUtils, tak musíte
poníženě hledat to správné místo, kam to napsat. Navíc se Borland
neobtěžoval opravit chybu, kdy ač jsem v části interface je unita
přidána do sekce implementation.
Změny a novinky ve VCL
Díky Kylixu, Delphi to pro Linux, došlo ke změně i v samotné VCL.
Kromě přesunům různých typů z jedné knihovny do druhé, byly zavedeny
nové funkce a původní prohlášeny za zastaralé (např. místo použití
procedury RaiseLastWin32Error je lepší zavolat RaiseLastOSError).
Tato věc s sebou přinesla nové varovné hlášení a direktivy
překladače – pokud použijete zastaralou či na operačním systému
závislou funkci, typ a pod., jste na to náležitě upozorněni, což je
jednoznačně dobře. Ovšem již jsem nedokázal překladači vnutit, že mi je
„nějakej“ Linux naprosto ukraden a že tyto hlášení nechci ani vidět.
Považuji to za fušeřinu.
Ono vůbec možnost vyvíjet pro Linux, resp. pomocí na platformě
nezávislé knihovně CLX, s sebou nese úskalí. Například nápovědu. Pokud
něco nevíte a hledáte v ní informace, tak často, ještě než se
k danému tématu dostanete, musíte určit, zda jej chcete pro VCL či CLX. Je
to neskutečně omezující a zvedá to hladinu adrenalinu v krvi. Proč někde
v nastavení není jednoduchá možnost určit tu skutečnost, že
v případě volání nápovědy chci pouze tu, která se týká pouze VCL (či
pouze CLX)? Navíc v seznamech často chybí údaj, pro kterou knihovnu
vlastně téma je. Připadne mi, že Borland je ve stádiu, kdy vlastně neví,
co chce: podporovat pouze Linux? Zavrhnout VCL a soustředit se pouze na CLX?
Nebo vše nechat na vývojářích, ať se rozhodnou? A nebo jít
na houby?



S novou verzí přišly i nové unity a třídy. Jmenujme alespoň jednotku
Math s mnoha matematickými funkcemi či StrUtils pro práci s řetězci.
V těchto jednotkách je mj. i přetížená funkce IfThen simulující
ternární operátor známý třeba z jazyka C (zajímavě působí
skutečnost, že část je deklarována v jedné a část v druhé jednotce).
Pomocí ConvUtils lze provádět převody mezi různými měrnými soustavami
(v případě, že nevíte, kolik kilogramů má jeden coul, měli byste
nikoliv hledat funkci v této jednotce, ale pouvažovat o půjčení si
učebnice fyziky pro základní školy). DateUtils zase poskytuje nepřeberné
množství funkcí pro práci s datem a časem.

Výraznou novinkou je přístup k databázím. Původní technologie BDE je
pomalu ale jistě odstavována a na výsluní se nově vyšvihl dbExpress, což
je nativní a na platformě nezávislé připojení k databázi. Ne, že by
chtěl Borland dělat konkurenci technologii OLE DB, ale přeci jenom, tuto na
Linuxu nenajdete. Důvodem je tedy Kylix. K dispozici jsou (prozatím)
připojení na databáze InterBase, MySQL, Oracle a DB2 (pokud někomu chybí MS
SQL Server, tak přístup je samozřejmě pomocí OLE DB resp. ADO, které je
v Delphi již od páté verze). Při použití dbExpressu není potřeba
žádná složitá instalace jako v případě BDE: ovladač se prostě
přilinkuje k EXE souboru a je hotovo. Ve svém jádru je dbExpess navržen
tak, aby pouze transformoval různé rozhraní databázových klientů na
jednotné, které navíc minimalizuje přístup k databázi. Podporuje pouze
jednozáznamovou vyrovnávací paměť, záznamy lze procházet jednosměrně
(pro obousměrné procházení slouží SQLClientDataSet, který sice také
načítá záznamy přes dbExpress, ale pamatuje si jednotlivé záznamy ve
vlastní paměťové tabulce).

Ke změnám došlo i v případě vývoje komponent (D)COM(+). V průvodci
vytváření COM objektů lze hned zadat to, zda se má implementovat nové
rozhraní či již nějaké definované (lze vybrat ze seznamu zaregistrovaných
rozhraní v systému). Opět i zde občas dojde k „zajímavým“ chybám
(od softwarové chyby v Delphi přes run-time error až k dalších
hlášením) například při registraci knihovny. Nevíte někdo o tom, že by
Borland propustil všechny testery?
Změny a novinky v překladači
U výčtových typů lze jednotlivým prvkům určit hodnotu podobně jako
v jazyce C (výhoda je jasná). Typ Variant podporuje nejen osmibytovou
celočíselnou hodnotu ale dokonce vaše vlastní datové typy. K direktivám
překladače přibyla mimo jiné direktiva IF, pomocí které se lze dotazovat
to, zda je deklarovaná nějaká proměnná případně na její hodnotu.
Vestavěný assembler doznal také výraznější změny. Díky kompletnímu
přepracování jsou podporovány instrukční sady MMX, SIMD, Enhanced MMX a
Intel SSE procesorů Pentium Pro, Pentium III a Pentium 4. Dále jsou
podporovány sady AMD Enhanced 3D procesoru AMD K7.
XML a eBusiness
XML dnes umí každá uklizečka, takže by bylo značně divné, pokud by
Delphi na tuto skutečnost nereagovaly. Kromě nové komponenty TXMLDocument,
což je zapouzdření XML parseru od Microsoftu (tedy standardně, lze si dodat
libovolný DOM parser), je možné použít průvodce XML Data Binding, který
z dodaného souboru typu XML, DTD, BIZ a dalších vygeneruje zdrojový kód
pro přístup ke XML souborům definovaných právě v těchto souborech. Tento
průvodce vytvoří zdrojovou jednotku s definovanými rozhraními a jejími
implementaci přímo na míru. Dalším nástrojem je XML Mapper, který
vytvoří transformaci mezi daty v XML a datovou množinou.
S XML úzce souvisí i elektronické obchodování. K tomu s Delphi
přichází několik nových technologií. BizSnap nabízí vývoj webových
služeb s technologií XML, XSL, SOAP či WSDL. K dispozici jsou noví
průvodci a nové komponenty. Pomocí WebSnapu tak můžete vyvíjet nejen pro
IIS či Netscape, ale nově i pro Apache. Dále je možné pomocí XSL Page
Produceru transformovat data z XML pomocí XSL do HTML stránek. Je
podporováno skriptování na straně serveru a ladění těchto skriptů.
Tak si to zrekapitulujeme
Výpisem novinek bychom mohli pokračovat dále a dále. Snažil jsem se
uvést ty, které zasáhnou největší počet vývojářů, budou-li šestou
verzi používat (a ani zde není výčet úplný). Také jsem upozornil na
některé problémy a chyby, na které jsem v poměrně krátké době narazil
jednak při sledování nových věcí, ale hlavně při převodu aplikace
z předchozí verze (mimochodem, pokud převedete aplikaci z předchozí verze
a pak se rozhodnete pro návrat, máte smůlu, pokud používáte české znaky
ve formulářích – Borland totiž opět změnil způsob práce s řetězci
v resourcích).
Po dobu recenze jsem měl s produktem několik dalších drobných
problémů. Jednou se mi stalo, že se Delphi ukončovaly ještě v době
nabíhání. Důvod jsem nenašel, ale po vyčištění registrů pomocí
utilitky D6RegClean bylo vše v pořádku (pravda, vše jsem si musel nastavit
znovu). Pokud jsem zavolal doplňování kódu na klíčových slovech public,
private či protected, došlo k vyvolání neobsloužené výjimky a následné
neakceptování klávesy Enter. Problém s nápovědou jsem již popisoval,
pouze doplním, že občas jsem ignorován při stisku klávesy F1 (zřejmě IDE
přeceňuje moji inteligenci, což sice na jednu stranu potěší, na druhou mi
to je kromě dobrého pocitu k ničemu).
Důležitou otázkou tedy je, zda provést přechod na novou verzi či
nikoliv. U verze Enterprise je to jasné. Pokud potřebujete vytvářet
moderní (webovou) aplikace s podporou XML, elektronického obchodování a
věcí s tím souvisejících, je přechod téměř nutností. U verze
Professional to již poněkud komplikovanější. Nepotřebujete-li vyvíjet pro
Linux a novinky v prostředí a VCL nejsou pro vás životně důležité,
zůstaňte u předchozí verze, ty nervy vám za to nestojí. Pokud zatím
Delphi nemáte a zvažujete o koupi, rozmyslete si, co chcete – D5 je
pořád ještě životaschopná verze, s Delphi 6 můžete
dokázat více.
Prokletí sudých verzí, zdá se, pokračuje. Jestliže Delphi 5 získaly
cenu Produkt měsíce (byť s drobnými výhradami), Delphi 6 si je zdaleka
nezasluhují. Některé věci jsou opravdu silné kafe. Rozhodně je pořád co
vylepšovat a doufám, že opravný baliček tu bude co nejdříve (a že bude
pouze jeden). Neříkám nekupujte, říkám kupujte velmi rozvážně.
Koneckonců i ta cena je – řekněme – vyšší, než jsme byli
zvyklí.
Plusy, mínusy, závěr
Plusy
- Novinky v IDE
- XML Data Binding Wizard
- dbExpress
- Nové knihovny
- CLX
Mínusy
- Některé nedotaženosti
- Drobné chyby v prostředí, komponentách
- Složitější volání nápovědy
- Chybí alespoň řádkový překladač pro Linux
- …
Závěr
Pro vývoj kvalitních robustních aplikací nepostradatelný nástroj
s mnoha vylepšeními, ale také s mnoha možnostmi, jak vylepšovat
i nadále.
Tento článek byl napsán pro časopis Softwarové noviny 9/2001.
Upozornění: tento text neprošel redakční úpravou, takže je
tak, jak byl napsán včetně případných chyb. Žádná část tohoto
článku nesmí být použita bez předchozího souhlasu autora.
Seznam mých dalších článků je v tomto přehledu.