Jak psát vlastní funkce pro ASP

    0

    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.

  • Žádný příspěvek v diskuzi

    Odpovědět