Začínáme s ASP, 7. díl: Funkce a procedury

Pokud chceme vytvořit nějaký složitější strukturovaný skript, měli bychom znát funkce a procedury.
V několika minulých lekcích jsme si probrali základní možnosti jazyku Visual Basic Script. S těmito znalostmi se již můžeme pustit do tvorby jednoduchých skriptů. Ale pokud chceme vytvořit nějaký složitější strukturovaný skript, měli bychom znát funkce a procedury.

Procedury

Procedura je malá součást programového kódu. Obvykle ji definujeme na začátku skriptu a poté ji můžeme v rámci celého skriptu neomezeně spouštět. Procedury používáme všude tam, kde víme, že budeme danou posloupnost operací používat několikrát, nebo chceme mít ASP skript přehledný. Špatně volená procedura však může mnohdy zpomalit spouštění skriptu, proto bychom měli být při psaní procedur opatrní.

[Public | Private] Sub jmeno [(seznam_parametru)]
    [prikazy]
    [Exit Sub]
    [prikazy]
End Sub

Klauzule Public a Private již známe. Použitím Public zpřístupníme proceduru pro všechny procedury ve všech skriptech. Klauzule Private ji činí privátní jen pro aktuální skript. Pojmenování procedury se řídí stejnými pravidly jako proměnné. Parametry jsou velmi důležitá součást proměnných – odlišují ji od běžného kódu. Proceduru můžeme spustit i s několika vstupními parametry oddělenými čárkou. Parametry však nemusí být jen vstupní, můžeme je v rámci procedury modifikovat.

Syntaxe seznamu parametrů

[ByVal | ByRef] název_proměnné[( )] 

ByVal (by Value): proměnná bude do procedury předána jako kopie původní proměnné. Veškeré změny hodnoty proměnné, které budou provedeny v rámci procedury, nebudou mít vliv na hodnotu původní proměnné. ByVal je implicitní - pokud jej tedy neuvedeme, je proměnná pokládána za ByVal

ByRef (by Reference): proměnná bude do procedury předána formou adresy původní proměnné. Změny hodnoty proměnné v rámci procedury budou mít za následek také změny původní proměnné.

Běh procedury lze kdykoliv ukončit příkazem Exit Sub.

Pro praktické přiblížení si uveďme příklad s dvěma procedurami. Příklad nám demonstruje použití procedur, ale nejen jich. Naučíme se zde také způsob, jak vygenerovat náhodná čísla.

Je to právě první příkaz - Randomize, který vytvoří „zárodek“ náhodného čísla. Vlastní náhodné číslo se generuje na základě tohoto zárodku funkcí Rnd. Funkce Rnd vrátí reálné číslo v rozmezí 0..1. Takže pokud potřebujeme například vygenerovat celé číslo do 100, použijeme Int (Rnd * 100). Funkce Int vrací celou část argumentu. Ale o matematických funkcích si řekneme něco více v dalších lekcích. To bylo jen pro vysvětlení, vraťme se však k našemu příkladu.

Smyslem našeho příkladu, kromě demonstrace procedur, je vytvořit jednoduchou úvodní stránku s počitadlem a seznamem kapitol. Počet kapitol bude pevný (10), jejich seznam budeme vypisovat pomocí procedury bez parametru. Počitadlo se bude vypisovat funkcí s jedním parametrem, jenž bude udávat počet cifer (4).

<HTML><HEAD><TITLE>Serial ASP na Zive.cz 7-1 (Pouziti procedury)</TITLE></HEAD>
<BODY>
<% 
Randomize

Public Sub Insert_count(ByVal dimension) 
    Dim x
    x = Int ( Rnd * (10^dimension) )
    response.write("<div align=center>jste <b>" & x & "</b> návštěvník</div>")
    Exit Sub
End Sub 

Public Sub Write_content
  Dim I
  For I = 1 To 10
    response.write("<a href=`chapter" & I & ".htm`>Kapitola " & I & "</a><BR>" & vbCrLf)
  Next
End Sub
%>

<H1>Vítejte na mé stránce</h1><br>
<%  Write_content %>
<hr>
<% Call Insert_count(4) %>

</BODY>
</HTML>

Při spuštění se z prvního ASP tagu provede pouze příkaz Randomize. Po vypsání záhlaví <H1> se v dalším ASP tagu zavolá procedura Write_content. Jak vidíme, pokud procedura neobsahuje parametry, můžeme ji zavolat jen napsáním jejího názvu. Mohli bychom však zapsat i Write_content(), resp. Call Write_content(). Příkaz Call je povinný, pokud voláme proceduru s jedním nebo více parametry – v našem případě je to procedura Insert_count.

V proceduře Insert_count provedeme nejprve deklaraci proměnné x, poté jí přiřadíme náhodné číslo. Proměnnou x spolu s dalšími formátovacími tagy a textem vypíšeme. Na konci procedury jsme použili Exit Sub, což v tomto případě není vůbec nutné, neboť mezi End Sub a Exit Sub není žádný příkaz.

Procedura Write_content provede jednoduchý cyklus a vypíše tagy <A> s odkazy na soubory chapter1.htm až chapter10.htm

Pár poznámek k procedurám:

  • Pokud neuvedeme klauzuli Private, je procedura pokládána vždy za Public
  • Nelze definovat proceduru v proceduře, jak je tomu například v Pascalu
  • Příkaz Exit Sub provede okamžité ukončení běhu procedury. V těle procedury může být více příkazů Exit Sub
  • Procedury lze spouštět rekurzivně, ale musíme dát pozor na přetečení zásobníku (nekonečné spouštění stejné procedury)
  • Název procedury musí být jedinečný

Funkce

Funkce a procedury jsou si velmi podobné. Rozdíl spočívá v tom, že funkce vrací hodnotu. VBS je k funkcím celkem benevolentní - dovoluje jejich spuštění také pomocí příkazu Call, viz dále.

Syntaxe:

[Public | Private] Function jmeno [(seznam_parametru)]
    [prikazy]
    [jmeno = vyraz]
    [Exit Function]
    [prikazy]
    [jmeno = vyraz]
End Function

Všechno, co jsme si řekli o procedurách, platí tedy i pro funkce. Krátký příklad vše ozřejmí. Použijeme zde funkci, která nám vygeneruje číslo reprezentující počet návštěvníků na stránce, tedy analogie předchozího příkladu

<HTML><HEAD><TITLE>Serial ASP na Zive.cz 7-2 (funkce)</TITLE></HEAD>
<BODY>
<% 
Randomize

Function Visitor(dimension)
    Visitor = Int ( Rnd * (10^dimension) )
End Function 
%>

<h1>Domovska stranka</h1>
<hr>
<% response.write("Jste návštìvník èíslo <b>" & Visitor(5) & "</b><br>" ) %>

</BODY>
</HTML>

Pokud zavoláme ve skriptu funkci Visitor jako proceduru, tedy Call Visitor(5), resp. jen Visitor(5), kupodivu nenastane chyba. Na skriptu nic nepoznáme, nicméně to nedoporučuji, pro tento případ máme procedury.

Nemusí vždy platit, že funkce musí vždy vracet výsledky matematických operací. Funkce můžou vracet všechny definované typy.

Dnes jsme si řekli něco o námi definovaných funkcích, ale VBS nabízí velké množství funkcí na zpracování matematických operací, operací s řetězci, datumem, časem atd. (dnes jsme narazili na Rnd). O tom všem si řekneme až v příštích kapitolách.

Váš názor Další článek: Východní Evropa – jediné místo, kde prodej PC stále rychle roste

Témata článku: Software, Programování, Exit, Reálné číslo, Původní číslo, Původní funkce, Fun, Díl, Private, Jedinečný parametr, Public, Call, Syntax, Funkce, Head, ASP


Určitě si přečtěte

Podívejte se, jak vypadá mikrofon nebo blecha pod elektronovým mikroskopem

Podívejte se, jak vypadá mikrofon nebo blecha pod elektronovým mikroskopem

** Z Brna pochází třetina světové produkce elektronových mikroskopů ** První československý kus vyrobila Tesla už v 50. letech ** Dnes na ni navazuje třeba brněnský Tescan

Jakub Čížek | 19

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 6

13 praktických tipů a triků pro Mapy.cz, které možná neznáte

13 praktických tipů a triků pro Mapy.cz, které možná neznáte

** Mapy.cz neslouží jen k zobrazení podkladů a plánování tras ** Nabízejí celou řadu dalších praktických funkcí a možností ** Vybrali jsme třináct tipů a triků, o kterých možná (ne)víte

Karel Kilián | 31

Biblická potopa Česka: Jak bychom dopadli, kdyby nás zatopil oceán

Biblická potopa Česka: Jak bychom dopadli, kdyby nás zatopil oceán

** Představte si biblickou potopu ** Nejprve zaniknou Děčín a Břeclav, pak i Brno a Praha ** Hlavním městem se stane Jihlava a zbytky Čechů přežijí na Kvildě

Jakub Čížek | 92

Wi-Fi 6 konečně začíná dostávat smysl. Poradíme, jak ji využít

Wi-Fi 6 konečně začíná dostávat smysl. Poradíme, jak ji využít

** Na trh míří první levné Wi-Fi 6 routery ** Nabídka zařízení, zejména notebooků, každý den roste ** Poradíme, jak nejlépe přejít s domácností na Wi-Fi 6

Tomáš Holčík | 28


Aktuální číslo časopisu Computer

Megatest 20 procesorů

Srovnání 15 True Wireless sluchátek

Vyplatí se tisknout fotografie doma?

Vybíráme nejlepší základní desky