Flash.jpw

  • Obecné
  • Adobe Flash
  • ActionScript 1 & 2.0
  • ActionScript 3.0
  • ActionScript 1 & 2.0

  • Úvod do ActionScriptu
  • Proměnné, pole a generický objekt
  • Podmínky a smyčky
  • Funkce
  • Úvod do objektů
  • Vlastní třídy
  • Objekty CORE
  • Objekty MOVIE
  • Výjimky
  • Asynchronní události
  • Předchozí: Podmínky a smyčky
  • Následující: Úvod do objektů
  • Funkce

    Funkce je blok kódu s přiřazeným názvem. Funkci si můžete představit jako "černou skříňku". Když je funkce volána, je jí přiřazen vstup (argumenty). Vykoná několik operací a pak může vrátit výstup (vrácenou hodnotu).

    Jednoduchá funkce (procedura)

    function zablokuj_tlacitko() {
    	_root.tlacitko.enabled = false;
    	_root.tlacitko.label = 'X';
    }

    Toto je nejjednodušší definice funkce (bez vstupních a výstupních argumentů). Při zavolání této funkce se jednoduše provedou příkazy uvnitř. Někdy se jí říká procedura.

    Zavolání funkce bez vstupních argumentů může vypadat třeba takto:

    zablokuj_tlacitko();

    Přestože funkce nemá vstupní argumenty, prázdnou závorku je třeba uvést.

    Složitější funkce

    Zde už použijeme vstupní argumenty.

    function zablokuj_tlacitko(popisek, barva) {
    	_root.tlacitko.enabled = false;
    	_root.tlacitko.label = popisek;
    	_root.tlacitko.color = barva;
    }

    Když potom voláme funkci, je třeba specifikovat hodnoty argumentů:

    zablokuj_tlacitko('X', 0xfcfcfc);

    Vracení hodnot z funkce (return)

    Kromě přijímání externích argumentů může funkce vracet hodnoty:

    function vynasob(a, b){
    	return a * b;
    }

    Příkaz return vrací hodnotu funkce a (na to pozor) ukončuje její zpracování. Případné příkazy za return už se neprovedou. Toho lze využít v podmínkách. Samotný return je možné použít i v proceduře právě na vyskočení ven.

    trace(vynasob(5, 3));	// 15

    Funkce s proměnlivým počtem argumentů

    Někdy je třeba funkci předávat předem neznámý počet argumentů.

    trace(prumer(5, 8, 0, 16, 38, 14));	// 13.5??

    AS2 neomezuje počet vstupních argumentů, funkci jich tedy můžete předat kolik chcete. Nespecifikované argumenty pak najdete v objektu arguments.

    function prumer(){
    	var sum = 0;
     
    	for(var item in arguments){
    		sum += arguments[item];
    	}
     
    	return sum / arguments.length;			
    }

    Každá funkce má objekt arguments obsahující pole přijatých argumentů. Počet přijatých argumentů je uložen ve vlastnosti length.

    Objekt arguments byl v AS3.0 zavržen, používá se nově tzv. rest operátor "..."

    V AS3 také musí počet předaných argumentů odpovídat definici. Není možné předat libovolné množství.

    Anonymní funkce (closure)

    Občas je třeba objektu nebo funkci předat vlastní funkci specifikovanou jen pro tento jeden účel. V takovém případě je možné funkci definovat přímo v místě použití.

    _root.onMouseDown = function(){
    	_root.nextFrame();
    }
     
    // je totéž jako:
    function mouseDownHandler(){
    	_root.nextFrame();
    }
    _root.onMouseDown = mouseDownHandler;

    Anonymní funkce je bezejmenná, tím pádem nejde použít víckrát.

    Všimněte si prosím na posledním řádku, že při předání funkce objektu se za název funkce závorka nepíše. Narozdíl od samotného zavolání funkce.

    Omezení vstupních a výstupních datových typů

    Stejně jako u proměnných, i vstupy a výstupy funkcí mohou být typově omezené.

    function zablokuj_tlacitko(popisek:String, barva:Number):Void {
    	_root.tlacitko.enabled = false;
    	_root.tlacitko.label = popisek;
    	_root.tlacitko.color = barva;
    }

    Vidíte, že syntaxe je identická, Void znamená žádný.

    Je dobrým zvykem omezovat vstupy i výstupy z funkcí. Na nepovolené typy pak může kompiler už při kompilaci upozornit.

    Všimněte si prosím, že Void je v AS2.0 psán s velkým počátečním V. Od verze 3.0 je pak, v rámci kompatibility s ostatními ECMA jazyky, void vždy s malým v.

    Předdefinované funkce prostředí

    Jsou to funkce definované samotným Flashem v každé animaci. Mějte prosím na paměti, že ve verzi 3.0 už většina těchto funkcí neexistuje.