Jak psát vlastní funkce pro ASP

14. prosince 2001

Každý programátor se po čase dostane do situace, kdy mu základní funkce jazyka nemohou stačit a konkrétní řešení ho přiměje napsat si funkci vlastní. To platí i pro ASP a jazyk VB Script.

Funkce může například pracovat s číslem (numerická), řetězcem (znaková) nebo vracet logickou hodnotu True/False atd. Taková napsaná funkce je úplně stejná jako již hotová funkce jazyka, vtip je jen v tom, že si tu svojí musíte naprogramovat a ještě ke všemu správně. Moje zkušenosti mě přivedly ke zjištění, že pokud složitou funkci „odfláknu“ a nějak si ji honem spíchnu, vrátí se mi moje lenost nebo spěch jako bumerang a hledání chyby ve složitém kódu se pro mě stává skutečným trestem. Jinými slovy, u složitých a velmi složitých funkcí se pečlivost vyplatí, a pokud příště takovou budu potřebovat, mám ji už hotovou a odladěnou.

Základní kámen

Každá dobrá funkce musí umět zpracovat hodnoty ze vstupu a zároveň pracovat bezchybně. Jaké podmínky by měla splňovat ?

Běh funkce samotné nesmí skončit žádnou chybou za běhu programu. Funkce musí umět ve svém těle rozlišit, zda hodnoty předané parametry jsou správné a v povoleném rozsahu. Funkce musí být na naprogramovaná tak, aby vždy vracela některý z požadovaných výsledků. Je žádoucí, aby funkce pracovala co nejrychleji a vynechala všechny nepotřebné řádky kódu ve svém těle. Začneme nyní od skutečného Adama a budeme se věnovat příkladu funkce řetězcové.

Řetězcová funkce

Funkce TRIM jazyka VB Script „očistí“ řetězec od počátečních a koncových mezer. Díky tomu můžete např. řetězce porovnávat. Příklad:

muj_retezec = TRIM(muj_retezec)

Co udělá předcházející řádek? Funkce TRIM() obdrží jako parametr funkce hodnotu (v závorkách). Tato hodnota je řetězec, který má být ořezán od případných počátečních a koncových mezer. Funkce zajistí ořezání a výsledkem je nová hodnota řetězce – do muj_retezec se vloží nová hodnota a ta původní je „zapomenuta“ a přepsána hodnotou novou.

Sprostotám je konec

Pokud budete chtít zabránit, aby vám uživatel do diskuze nevkládal např. konkrétní sprostá slova a jiné nežádoucí vulgární výrazy, VB Script vám nepomůže. Musíte si tedy naprogramovat vlastní funkci (uváděný kód pouze naznačuje složitější variabilní řešení). Funkce dostane jméno stop_vulgar a parametrem text_oduziv jí bude předána řetězcová hodnota, to jest řetězec k prozkoumání.

Zdrojový kód této funkce:

> ‚ Začátek funkce
Function stop_vulgar(text_oduziv)
‚ ——————————————————————–
‚ Komentář:
‚ Řetězcová funkce, která vrací jako výsledek funkce číslo a má dva stavy:
‚ 1. Vrací číslo o hodnotě 1, kdy hodnota vstupního řětězce text_oduziv obsahuje
‚ nežádoucí výraz
‚ 2. Vrací nulu, když řetězec je v pořádku a neobsahuje vulgární slovo
Popis parametru: vstupní parametr text_oduziv je řetězec
‚ Vulgární slova jsou definována v těle funkce
‚ ——————————————————————–
int vysledek = 0 ‚ deklarace proměnné vysledek a nastavení její hodnoty na nulu
‚ ošetření chybového stavu, tato část se vykoná jen tehdy, je-li délka prozkoumávaného
‚ řetězce větší než nula
If Len(TRIM(text_oduziv)) > 0 then
   if instr(1,text_oduziv,“zoufalec“)>0 then
      vysledek = 1
   End If
   if instr(1,text_oduziv,“pomýlenec“)>0 and vysledek = 0 then
      vysledek = 1
   End If
End If
stop_vulgar=vysledek ‚ výsledek funkce
‚ Konec funkce
End Function %>

Všimněte si, že funkce je přesně popsaná v komentáři:

  • co dělá
  • jaká je její návratová hodnota
  • jaká je hodnota parametru na vstupu

    Možná že vám připadá trochu malicherné funkci podrobně popisovat, ale pokud ji naprogramujete a použijete, za týden si budete sotva pamatovat, že ji máte, natož abyste si pamatovali podrobnosti. Pokud si ji hezky okomentujete, budete ji mít popsanou přesně pro svoje potřeby a nemusíte později bádat nad tím, co funkce dělá a jaký vrací výsledek.

    Funkce splňuje všechny požadavky z úvodu:

  • její běh nemůže skončit chybou
  • hodnota parametru ze vstupu je korektní, neboť je předaná vždy jako řetězec
  • hodnota výsledku funkce je předem nastavená na hodnotu nula, která může být dále změněna dalšími řádky kódu
  • vykonají se jen potřebné řádky kódu, omezené podmínkami If podmínka – End If; ty řádky, které podmínky nesplňují, budou vynechány

    Starší komentáře ke článku

    Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

  • Další článek Význam ostrůvků v XML

    Mohlo by vás také zajímat

    Nejnovější

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *