home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 September / PCWorld_2004-09_cd.bin / novinky / Interval / 6 / clanek05.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-06-28  |  24.8 KB  |  272 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='0' />
  10. <meta name='robots' content='index, follow' />
  11. <meta name='googlebot' content='index, follow, noarchive' />
  12. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  13. <meta name='keywords' content='Interval' />
  14. <meta http-equiv='imagetoolbar' content='no' />
  15. <meta http-equiv='MSThemeCompatible' content='no' />
  16. <meta name='MSSmartTagsPreventParsing' content='true' />
  17. <meta name='ICBM' content='49.1915, 16.626' />
  18. <meta name='DC.Title' content='Interval.cz' />
  19. <meta name='DC.Identifier' content='http://interval.cz' />
  20. <meta name='DC.Language' content='cs' />
  21. <link rel='alternate' type='text/xml' title='RSS' href='http://interval.cz/__rss/rss.asp' />
  22. <link rel='shortcut icon' href='favicon.ico' />
  23. <link rel='home' href='http://interval.cz' />
  24. <link rel='search' href='http://interval.cz/search_ex.asp' />
  25. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  26. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  27. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  29. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  30. <title>Interval.cz - denn∞ o tvorb∞ webu a e-komerci</title>
  31. </head>
  32. <body class='interval interval-articles'>
  33. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  34. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li class='right selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li><li class='right'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interforum.interval.cz'>Interforum</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  35. <div id='page-body'><div id='page-left'><div id='article'>
  36.  
  37.  
  38.  
  39. <h2>╚esk² programovacφ jazyk Flex a modFlex</h2>
  40. <p id='prepend'>Flex je nov² programovacφ jazyk ΦeskΘ provenience, zalo₧en² na jazyku Ada, s d∙razem na vysokou spolehlivost a bezpeΦnost. Je to univerzßlnφ programovacφ jazyk, my se zde vÜak budeme zajφmat p°edevÜφm o webovΘ aplikace, kde Flex m∙₧e b²t pou₧it jako alternativa k PHP. V tomto Φlßnku budu demonstrovat filozofii Flexu na jednoduchΘ aplikaci.</p>
  41.  
  42.  
  43. <p>Firma <a href='http://www.alsoft.cz'>A&&L soft s. r. o.</a> se ₧ivφ v²vojem elektronickΘho bankovnictvφ a Flex vznikl jaksi bokem, proto₧e ₧ßdn² z b∞₧n∞ pou₧φvan²ch jazyk∙ nevyhovoval jejφm pot°ebßm. Tφm, ₧e tento jazyk navrhli chlapci od bankovnφch systΘm∙, je z velkΘ Φßsti dßno, na co byl p°i nßvrhu kladen d∙raz - spolehlivost, bezpeΦnost a snadnou udr₧ovatelnost k≤du. Auto°i vÜak tvrdφ, ₧e nejde o jazyk pro ·zkΘ pou₧itφ, ale o jazyk univerzßlnφ.</p>
  44. <p>Flex byl do znaΦnΘ mφry inspirovßn jazykem Ada. Adu vyvinulo na poΦßtku osmdesßt²ch let americkΘ ministerstvo obrany a pou₧φvß se v mission/safety-critical aplikacφch. V Ad∞ je nap°φklad °φdφcφ software k raketoplßnu. Poslednφ standard Ady je z roku 1995, je tedy jasnΘ, ₧e Ada v modernφch aplikacφch u₧ ztrßcφ dech, zatφmco Flex by m∞l poskytovat programßtor∙m vÜechno, co mß modernφ jazyk mφt. Flex podporuje "vÜechny stupn∞ abstrakce" a umo₧≥uje konzervativnφ strukturovanΘ programovßnφ, podpo°enΘ silnou typovou kontrolou, ale i plnohodnotnΘ OOP. Flex se tedy sna₧φ b²t progresivnφ i konzervativnφ zßrove≥. Neobsahuje ₧ßdnΘ nevyzkouÜenΘ postupy, vÜe, co v n∞m najdeme, znßme ji₧ odjinud. Nep°φjemn²m d∙sledkem tohoto p°φstupu je, ₧e se jazyk zaΦßteΦnφk∙m m∙₧e jevit jako komplikovan², aΦkoli je o dost jednoduÜÜφ ne₧ t°eba prßv∞ Ada.</p>
  45.  
  46. <h2>Co je modFlex</h2>
  47. <p>U₧ z nßzvu je patrnΘ, o co jde - <a href='http://www.modflex.com'>modFlex</a> je modul populßrnφho HTTP serveru Apache, kter² umo₧≥uje pou₧φt Flex pro generovßnφ dynamickΘho webu. Pokud modFlex obdr₧φ po₧adavek na n∞jak² flexovsk² skript, p°elo₧φ ho, vyrobφ z n∞j knihovnu ve formßtu DLL, tu naΦte do pam∞ti a pou₧ije k obslou₧enφ po₧adavku. P°eklad samoz°ejm∞ neprobφhß p°i ka₧dΘm po₧adavku, ale jen po zm∞n∞ zdrojovΘho skriptu.</p>
  48. <p>P°esto₧e tato architektura se spφÜe podobß architektu°e JavaServlet∙ (a jak dßle uvidφme, flexovskΘ skripty trochu p°ipomφnajφ JavaServlety), auto°i se zatφm nesna₧φ konkurovat webov²m °eÜenφm postaven²m na Jav∞. Flex je spφÜe konkurencφ pro PHP, coby bezpeΦn∞jÜφ alternativa k tomuto populßrnφmu nßstroji. Tomu odpovφdß i p°φtomnost nativnφho bindingu na knihovny PHP. JakΘkoli knihovnφ funkce, kterΘ jste zvyklφ pou₧φvat v PHP, m∙₧ete pou₧φvat i s modFlex. Samoz°ejmostφ je i snaha o konkurenci v cenovΘ oblasti - modFlex je pochopiteln∞ zdarma.</p>
  49.  
  50. <h2>Vzhled skript∙</h2>
  51. <p>UrΦit∞ u₧ jste zv∞davφ na n∞jak² ten kousek zdrojovΘho k≤du. Samoz°ejm∞ by byl h°φch nezaΦφt n∞jak²m tφm "Ahoj sv∞te!", vypsan²m na obrazovku (do okna prohlφ₧eΦe):</p>
  52.  
  53. <div class='sample'>
  54. program ahoj_svete =
  55. <br />
  56. <br />with
  57. <br />  mflib; <span class='comment'>-- Hlavnφ modul modFlexu zprost°edkovßvß spojenφ s vn∞jÜφm sv∞tem.</span>
  58. <br />
  59. <br />begin
  60. <br />  modflex_request^.out_header.insert('Content-Type', 'text/plain; charset=UTF-8');
  61. <br />á
  62. <br />  write_line('Ahoj, mnohovesmφre!');
  63. <br />á
  64. <br />  modflex_request^.out_result := 200;
  65. <br />  modflex_request^.out_result_info := 'OK';
  66. <br />end ahoj_svete;
  67. </div>
  68.  
  69. <p>Zde ho mßte. Podrobn∞jÜφ komentß°e si vyÜet°φme na komplikovan∞jÜφ k≤d. Zde se jen poÜle klientovi hlaviΦka obsahujφcφ formßt odpov∞di, p°idß se sama odpov∞∩ a celß akce se dokonΦφ nastavenφm statutu protokolu HTTP.</p>
  70. <p>Jak vidφte, Flex mß pascalskou syntaxi (stejn∞ jako Ada). P°esto₧e v²sledkem p°ekladu bude DLL knihovna, k≤d je formßln∞ oznaΦen jako program. ╪et∞zce se vklßdajφ do jednoduch²ch apostrof∙, st°φÜka slou₧φ k dereferencovßnφ ukazatel∙, komentß°e se pφÜφ za dvojitou pomlΦku. Za zmφnku jeÜt∞ stojφ ono <samp>end ahoj_svete;</samp> ·pln∞ na konci û "pojmenovanΘ endy" jsou povinnΘ, proto₧e toto opat°enφ zlepÜuje orientaci v delÜφch programech.</p>
  71. <p>D∙le₧itΘ je, ₧e modFlex akceptuje zdrojovΘ k≤dy jenom v k≤dovßnφ UTF-8. Vnit°n∞ jsou vÜechny °et∞zce v UNICODE. Skripty tedy m∙₧ete psßt v libovolnΘm textovΘm editoru, kter² toto k≤dovßnφ zvlßdß, i kdy₧ je lepÜφ pou₧φt n∞jak² modernφ editor, kter² zvlßdne i zv²razn∞nφ syntaxe. K dispozici je <a href='http://www.modflex.com/buxus/web/cz/Products/Development-Tools/modFlex/Community/Integration-with-Text-Editors'>°ada integraΦnφch balφk∙</a>, kterß se stßle rozÜi°uje. Bohu₧el v souΦasnosti jeÜt∞ neexistuje podpora pro oblφben² <a href='http://www.pspad.com'>PSPad</a>.</p>
  72.  
  73. <h2>Ukßzka prßce s Flexem</h2>
  74. <p>Seznamovacφ skript mßme za sebou, tak₧e je Φas na rozsßhlejÜφ p°φklad. Tφm bude rafinovanß webovß aplikace, kterß vyd∞lφ dv∞ celß nezßpornß Φφsla a zobrazφ v²sledek. Komentß°∙ p°φmo v k≤du bude poskrovnu, zato budu komentovat ka₧d² ·sek k≤du v textu.</p>
  75. <p>Aplikace se sklßdß z hlavnφho programu a jednoho modulu. Moduly ve Flexu vφce mΘn∞ odpovφdajφ jednotkßm (unit∙m) v Pascalu - a₧ na n∞kolik vylepÜenφ. Moduly se mohou hierarchicky vno°ovat do sebe a dokonce mohou b²t d∞d∞ny. P°i rozboru budeme postupovat stylem "shora dol∙", tak₧e te∩ hlavnφ program:</p>
  76.  
  77. <div class='sample'>
  78. program priklad =
  79. <br />
  80. <br />with
  81. <br />  modulek,
  82. <br />  mflib;á
  83. <br /> 
  84. <br />var
  85. <br />  stranka : c_stranka;
  86. <br />
  87. <br />begin
  88. <br />  modflex_request^.out_header.insert('Content-Type', 'text/html; charset=UTF-8');
  89. <br />
  90. <br />  stranka.vypis_telo;
  91. <br />  stranka.vypis_dynamicky_obsah;
  92. <br />  stranka.vypis_konec;
  93. <br />
  94. <br />leave
  95. <br />  modflex_request^.out_result := 200;
  96. <br />  modflex_request^.out_result_info := 'OK';
  97. <br />end priklad;
  98. </div>
  99.  
  100. <p>Tento program mß jen o Üest °ßdek vφc, ne₧ ·vodnφ "Ahoj sv∞te!". Prvnφ zm∞nou je, ₧e tento program pou₧φvß krom∞ standardnφho modulu <code>mflib</code> i modul <code>modulek</code>, ve kterΘm budou "st°eva" naÜφ aplikace. Dßle deklarace instance <code>stranka</code> t°φdy <code>c_stranka</code> (je taktΘ₧ v modulu <code>modulek</code>). Flex nepou₧φvß referenΦnφ objektov² model jako Java nebo Delphi, ale spφÜe systΘm z C++, tak₧e tato deklarace rovnou vytvo°φ instanci t°φdy. Poslednφ zm∞nou je sekce uvozenß klφΦov²m slovem <code>leave</code>, kterΘ odpovφdß klφΦovΘmu slovu <code>finally</code> z Javy - skript se pokusφ dokonΦit HTTP po₧adavek, i kdy₧ nastane neoÜet°enß v²jimka. Zde to vlastn∞ ani nenφ pot°eba, proto₧e odpov∞∩ "200 OK" je v²chozφ, obecn∞ se <code>leave</code> sekce hodφ pro uvol≥ovßnφ zdroj∙, kterΘ musφ b²t uvoln∞ny i v p°φpad∞ chyby.</p>
  101. <p>Te∩ p°iÜel Φas na popis modulu <code>modulek</code>. Flex preferuje dvojstopΘ programovßnφ - moduly i t°φdy b²vajφ zpravidla rozd∞leny na ve°ejnou specifikaci a privßtnφ implementaci, ka₧dou Φßst ve zvlßÜtnφm souboru. OvÜem nenφ to nutnou podmφnkou, m∙₧ete slouΦit jak soubory, tak specifikaΦnφ a implementaΦnφ Φßst. V naÜφ aplikaci jsem modul i t°φdu rozd∞lil. Specifikace <code>modulku</code> vypadß takto:</p>
  102.  
  103. <div class='sample'>
  104. module public modulek =
  105. <br />
  106. <br />  class public c_stranka =
  107. <br />    static vypis_telo;
  108. <br />    static vypis_dynamicky_obsah;
  109. <br />    static vypis_konec;
  110. <br />  end c_stranka;
  111. <br />
  112. <br />end modulek;
  113. </div>
  114.  
  115. <p>Ve°ejnß specifikace modulu <code>modulek</code> obsahuje jednu d∙le₧itou polo₧ku, a sice specifikaci t°φdy <code>c_stranka</code>. Tato t°φda obsahuje t°i metody, kterΘ se budou starat o v²pis HTML k≤du do prohlφ₧eΦe. Metody zaΦφnajφ klφΦov²m slovem <code>static</code>, kterΘ ale neznamenß, ₧e se jednß o statickΘ metody jak je znßme z jazyk∙ Java, C# nebo C++, ale ₧e tyto metody nelze v p°φpadn²ch potomcφch t°φdy <code>c_stranka</code> p°edefinovat. Pokud bychom o mo₧nost p°edefinovßnφ stßli, byly by metody uvozeny klφΦov²m slovem <code>virtual</code> a samotnΘho p°edefinovßnφ v p°φpadn²ch potomcφch bychom dosßhli p°es <code>override</code>. SkuteΦnΘ statickΘ metody t°φdy se uvozujφ klφΦov²m slovem <code>procedure</code>.</p>
  116. <p>Nynφ se podφvßme na implementaci modulu <code>modulek.</code> Jeho zaΦßtek vypadß takto:</p>
  117.  
  118. <div class='sample'>
  119. module private modulek =
  120. <br />
  121. <br />  with mflib,
  122. <br />       standard,
  123. <br />       standard.conversions;
  124. <br />  
  125. <br />  type t_delitel = t_unsigned range 1..t_unsigned:last;
  126. </div>
  127.  
  128. <p>Nejprve je zde v²Φet pou₧φvan²ch modul∙, krom∞ tradiΦnφho <code>mflib</code> obsahuje jeÜt∞ <code>standard</code>, kter² definuje datovΘ typy pou₧φvanΘ ve standardnφch knihovnßch Flexu, a <code>standard.conversions</code> pro p°evody z °et∞zce na Φφslo a naopak. Zde je nutno poznamenat, ₧e Flex neobsahuje ₧ßdnΘ p°eddefinovanΘ typy, poskytuje pouze prost°edky pro deklaraci typ∙. Jen tak pro zajφmavost, definice ÜestnßctibitovΘho znamΘnkovΘho Φφsla z modulu <code>standard</code> vypadß nßsledovn∞:</p>
  129.  
  130. <div class='sample'>
  131. t_signed16 = signed 16; <span class='comment'>-- Üestnßct bit∙</span>
  132. </div>
  133.  
  134. <p>Pro ·Φely ukßzkovΘ aplikace jsem takΘ nadefinoval jeden nov² typ, a to <code>t_delitel</code>. Ve skuteΦnosti je to potomek typu <code>t_unsigned</code> s omezen²m rozsahem hodnot. Takto se vyhneme nebezpeΦφ d∞lenφ nulou, proto₧e nulu do prom∞nnΘ typu <code>t_delitel¡</code> prost∞ p°i°adit nebude mo₧nΘ.</p>
  135. <p>Flex pou₧φvß takzvan² siln² typov² systΘm, tedy ·pln² opak p∙vodnφ filozofie PHP. Ve Flexu je ka₧dß prom∞nnß n∞jakΘho nem∞nnΘho typu. Prom∞nnΘ stejnΘho typu lze libovoln∞ p°i°azovat, prom∞nnΘ r∙zn²ch typ∙ mezi sebou automaticky p°i°azovat nelze. ZnamΘnkovΘ Φφslo do neznamΘnkovΘho prost∞ nep°i°adφte, tedy pokud nepou₧ijete explicitnφ p°etypovßnφ. Takovßto strategie se v∞tÜinou pozitivn∞ projevφ ve spolehlivosti vytvß°en²ch program∙. Prßce s typy je vid∞t v nßsledujφcφ procedu°e:</p>
  136.  
  137. <div class='sample'>
  138. <br />procedure dej_dynamicky_obsah(html_tag : t_char32str)
  139. <br />    return t_char32str =
  140. <br />  var
  141. <br />    delenec : t_unsigned;
  142. <br />    delitel : t_delitel;
  143. <br />    podil : t_unsigned;
  144. <br />  begin
  145. <br />    delenec := string_to_unsigned(modflex_request^.get_vars.find('delenec'));
  146. <br />    delitel := string_to_unsigned(modflex_request^.get_vars.find('delitel'));
  147. <br />    podil := delenec div delitel;
  148. <br />    result := '<' & html_tag & '>' & unsigned_to_string(podil) & '</' & html_tag & '>';
  149. <br />  catch
  150. <br />    when constraint_error do
  151. <br />      result := 'Φφslo mimo povolen² rozsah';
  152. <br />    when conversion_error do
  153. <br />      result := 'nekorektnφ Φφslo';
  154. <br />    when others do
  155. <br />      result := 'nespecifikovanß chyba';
  156. <br />  end dej_dynamicky_obsah;
  157. </div>
  158.  
  159. <p>Jednß se o b∞₧nou proceduru (nikoli o metodu), kterß p°ebφrß jeden parametr typu °et∞zec znak∙ a v²sledek vracφ tΘ₧ jako °et∞zec znak∙. Zajφmavostφ je, ₧e Flex mß univerzßlnφ °et∞zce - tedy nejen znakovΘ, klidn∞ m∙₧ete mφt °et∞zec cel²ch Φφsel. DalÜφ specialita je, ₧e Flex neznß klφΦovΘ slovo <code>function</code>, hodnotu m∙₧e vrßtit i procedura nebo statickß Φi virtußlnφ metoda.</p>
  160. <p>V tΘto konkrΘtnφ procedu°e jsou nejprve deklarovßny t°i prom∞nnΘ. V zadßnφ jsme se omezili na kladnß Φφsla, d∞litel je typu <code>t_delitel</code>, co₧ nßm zaruΦuje, ₧e nikdy nebudeme d∞lit nulou. Prom∞nnΘ <code>delenec</code> a <code>delitel</code> se naplnφ z prom∞nn²ch, p°edan²ch v HTTP po₧adavku metodou GET. Pak se vypoΦφtß podφl, p°evede se na °et∞zec a obalφ se HTML elementem, kter² procedura dostala jako parametr. (VÜimn∞te si pou₧itφ ampersandu na mφst∞ operßtoru z°et∞zenφ.) Nßvratovß hodnota procedury se ulo₧φ do prom∞nnΘ <code>result</code>.</p>
  161. <p>Za poslednφm °ßdkem "°ßdnΘho" k≤du se nachßzφ sekce pro zotavenφ z chyb. KlφΦovΘ slovo <code>catch</code> mß obdobn² v²znam jako v jazycφch Java nebo C++. K≤d za <code>catch</code> se provede, pokud v °ßdnΘm k≤du procedury nastane v²jimka. Ta m∙₧e b²t vyvolßna nap°φklad p°i p°evodu °et∞zce na Φφslo. Zjistφme tedy typ v²jimky a podle toho upravφme nßvratovou hodnotu procedury.</p>
  162. <p>VÜimn∞te si, ₧e tato procedura je velice robustnφ. Bu∩ korektn∞ provede to, co se od nφ oΦekßvß, nebo sluÜn∞ vrßtφ p°esn∞ diagnostikovanou chybu, co₧ v PHP Φasto nenφ mo₧nΘ bez slo₧itΘho testovßnφ parametr∙.</p>
  163. <p>S hlavnφ Φßstφ ukßzkovΘ aplikace jsme hotovi, nynφ se vrßtφme ke t°φd∞ <code>c_stranka</code>, jejφ₧ implementace je taktΘ₧ v implementaΦnφ Φßsti modulu <code>modulek</code>:</p>
  164.  
  165. <div class='sample'>
  166. <br />  class private c_stranka =
  167. <br />
  168. <br />    static vypis_telo =
  169. <br />    begin
  170. <br />      write_line('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
  171. <br />
  172. <br />      write_line('<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">');
  173. <br />      write_line('<head><title>Priklad v modFlexu</title></head>');
  174. <br />      write_line('<body>');
  175. <br />      write_line('  <h1>DeliΦka</h1>');
  176. <br />
  177. <br />      write_line('<form action="priklad.src" method="get">');
  178. <br />      write_line('  d∞lenec: <input type="text" name="delenec" />');
  179. <br />      write_line('  d∞litel: <input type="text" name="delitel" />');
  180. <br />      write_line('  <input type="submit" value="Vyd∞lit" />');
  181. <br />      write_line('</form>');
  182. <br />    end vypis_telo;
  183. </div>
  184.  
  185. <p>Uvedenß metoda jednoduÜe vypφÜe HTML k≤d, kter² modFlex odeÜle prohlφ₧eΦi. Na strßnce bude jednoduch² webov² formulß°, pro zadßnφ d∞lence a d∞litele. Druhß a t°etφ metoda a konec modulu je zde:</p>
  186.  
  187. <div class='sample'>
  188.     static vypis_dynamicky_obsah =
  189. <br />    begin
  190. <br />      if modflex_request^.get_vars.exist('delenec') and
  191. <br />         modflex_request^.get_vars.exist('delitel')
  192. <br />      then
  193. <br />        write_line(dej_dynamicky_obsah('b'));
  194. <br />      else
  195. <br />        write_line('zadejte dv∞ kladnß celß Φφsla');
  196. <br />      end if;
  197. <br />    end vypis_dynamicky_obsah;
  198. <br />
  199. <br />    static vypis_konec =
  200. <br />    begin
  201. <br />      write_line('</body></html>');
  202. <br />    end vypis_konec;
  203. <br />
  204. <br />  end c_stranka;
  205. <br />
  206. <br />end modulek;
  207. </div>
  208.  
  209. <p>Metoda <code>vypis_dynamicky_obsah</code> zkontroluje, jestli byla odeslßna data z webovΘho formulß°e. Pokud ano, zavolß metodu <code>dej_dynamicky_obsah</code> a jejφ v²sledek zobrazφ, v opaΦnΘm p°φpad∞ vypφÜe v²zvu pro u₧ivatele. Metoda <code>vypis_konec</code> za komentß° opravdu nestojφ.</p>
  210.  
  211. <h2>Dojmy a shrnutφ</h2>
  212. <p>ModFlex je docela sympatick² projekt. Flex je opravdu zajφmav² jazyk, modern∞ navr₧en², ale postaven² na osv∞dΦen²ch zßkladech. Skripty psanΘ ve Flexu by opravdu mohly b²t spolehliv∞jÜφ ne₧ v PHP. Otßzkou je, zda o to v²vojß°i stojφ - v∞tÜina nadÜenc∙, kte°φ si cht∞jφ co nejrychleji zprovoznit jednoduch² skript asi v²hody tohoto jazyka neocenφ.</p>
  213. <p>Samoz°ejm∞ vÜechno mß svΘ nev²hody, tou nejv∞tÜφ vÜak je pravd∞podobn∞ novost Flexu. P°ekladaΦ jeÜt∞ nenφ ·pln∞ hotov², tak₧e pokud budete chtφt pou₧φt n∞jakΘ exotiΦt∞jÜφ konstrukce, m∙₧e se vßm stßt, ₧e narazφte na hlßÜku typu "feature not implemented". To samΘ platφ o standardnφch knihovnßch, kterΘ jsou zatφm relativn∞ chudΘ (co₧ by ale vadit nemuselo, proto₧e m∙₧ete pou₧φvat knihovny z PHP). Na druhou stranu, samotn² p°ekladaΦ Flexu i modFlex jsou napsßny p°φmo ve Flexu. A takov² p°ekladaΦ, to jsou desetitisφce °ßdek slo₧itΘho k≤du, tak₧e n∞jakΘ nespolehlivosti se bßt nemusφte.</p>
  214.  
  215.  
  216.  
  217. <div id='article-author'>
  218. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=235'>PaÜka, Marek</a> (10. 6. 2004)
  219.  
  220. </div>
  221.  
  222.  
  223.  
  224. </div></div>
  225. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  226. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  227.  
  228.  
  229.  
  230. <div class='page-right-box book'>
  231.     <h3>Kni₧nφ novinka</h3>
  232.     <div class='page-right-box-in'>
  233.         <div class='book-top'>
  234.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=268'>Zßkladnφ pr∙vodce webdesignem</a></h4>
  235.         </div>
  236.     </div>
  237.     <div class='image'>
  238.         <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  239.     </div>
  240.     <div class='book-bottom'>Cena: <span class='book-price-old'>300 KΦ</span> <span class='book-price-new'>270 KΦ</span></div>
  241. </div>
  242.  
  243.  
  244.  
  245. <div class='page-right-box reading'>
  246.     <h3>NejΦten∞jÜφ</h3>
  247.     <div class='page-right-box-in'>
  248.         <ul>
  249. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3411'>Metadata a hlaviΦka pro XHTML dokument</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3400'>╚esk² programovacφ jazyk Flex a modFlex</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3386'>╚eskß sprßva socißlnφho zabezpeΦenφ on-line</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3412'>WebML - operace a manipulace s daty</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=1444'>Statistika p°φstup∙ v PHP - kalendß°</a></li>
  250.         </ul>
  251.     </div>
  252. </div>
  253.  
  254.  
  255.  
  256. <div class='page-right-box cauldron'>
  257.     <h3>Diskuznφ kotel</h3>
  258.     <div class='page-right-box-in'>
  259.         <ul>
  260. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3400' title='(32 komentß°∙)'>╚esk² programovacφ jazyk Flex a modFlex</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3411' title='(25 komentß°∙)'>Metadata a hlaviΦka pro XHTML dokument</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3412' title='(10 komentß°∙)'>WebML - operace a manipulace s daty</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3418' title='(5 komentß°∙)'>Sprßva barev - Color Management System (CMS)</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3415' title='(4 komentß°∙)'>Sprßvce soubor∙ pomocφ DataGridu v ASP.NET - upload soubor∙</a></li>
  261.         </ul>
  262.     </div>
  263. </div>
  264.  
  265.  
  266.  
  267. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  268. </div>
  269. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  270. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  271. </body>
  272. </html>