V²uka Flash (20.)

┌vod

V dneÜnφm dφlu si ukß₧eme zm∞ny v ActionScriptu 2, kterΘ se vyskytly v novΘ verzi Macromedia Flash MX 2004. ActionScript 2 nynφ obsahuje vylepÜenou podporu OOP zejmΘna t°φd, rozhranφ, d∞diΦnosti a jin²ch OOP prvk∙. Nynφ si postupn∞ ukß₧eme jednotlivΘ zm∞ny v ActionScriptu2.


Strong Typing

V ActionScriptu 2 mß nynφ ka₧dß prom∞nnß pevn∞ stanoven² datov² typ (Strong Typing) jako je tomu nap°φklad v ostatnφch jazycφch. Pokud tedy vytvo°φme prom∞nnou typu String a pokusφme se do nφ ulo₧it hodnotu typu Number, vyhodnotφ kompilßtor toto p°i°azenφ jako chybu. Vφce na p°φklad∞:


var Typ:String = "Peugeot";
Typ = 1;
trace(Typ);

Zobrazφ chybovΘ hlßÜenφ:


**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in 
 assignment statement: found Number where String is required.
     Typ = 1;

Total ActionScript Errors: 1 	 Reported Errors: 1

ChybovΘ hlßÜenφ nßm oznamuje, ₧e se pokouÜφme do prom∞nnΘ typu String p°i°adit hodnotu typu Number. Sprßvn∞ by m∞l p°φklad vypadat takto:


var Typ:String = "Peugeot";
Typ = "Audi";
trace(Typ);

Jak si m∙₧ete vÜimnout, tak se nßm p°i vytvß°enφ prom∞nn²ch zobrazφ kontextovΘ menu, kterΘ nßm pom∙₧e s v²b∞rem typu prom∞nnΘ, funkce atd.

Nynφ si ukß₧eme, jak deklarujeme funkce, jejich parametry a nßvratovΘ hodnoty. Pro ukßzku si vytvo°φme funkci.


function Vypocitej(a:Number, b:Number):String {
	return a / b;
}

trace(Vypocitej(10, 2));

Funkce op∞t vrßtφ chybovΘ hlßÜenφ:


**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: The expression returned must 
 match the function's return type.
     	return a / b;

Total ActionScript Errors: 1 	 Reported Errors: 1

Jako nßvratovou hodnotu jsme nastavili datov² typ String, ovÜem sprßvn∞ mß b²t Number.


T°φdy

Oproti starÜφ verzi ActionScriptu musφme p°i vytvß°enφ t°φd v ActionScriptu 2 dodr₧et urΦitΘ postupy, bez kter²ch by t°φdy vytvß°et neÜlo. Jednß se p°edevÜφm o:

Nynφ si ukß₧eme jednoduchou t°φdu.


class cAuto {
	var Typ:String;
	function Info():String {
		return Typ;
	}
	
}
// Vytvo°φme instanci t°φdy
var auto:cAuto = new cAuto();
auto.Typ = "Peugeot";

// Zobrazφme obsah prom∞nnΘ
trace(auto.Info());

Nynφ ovÜem nastal okam₧ik, abychom definici naÜφ t°φdy p°esunuli do externφho .as souboru. Vytvo°φme tedy nov² ActionScript .as soubor, kter² pojmenujeme stejn∞ jako nßzev nßmi vytvo°enΘ t°φdy (cAuto.cs) pomocφ menu File -> New... -> ActionScript File.

M∙₧e se stßt, ₧e budeme chtφt strukturu t°φd trochu zorganizovat. M∙₧eme vyu₧φt mo₧nosti organizace do struktury podobnΘ Jmenn²m prostor∙m - Namespaces podobnΘ nap°φklad z jazyk∙ Java Φi C#. Tato organizace spoΦφvß ve vytvo°enφ adresß°ovΘ struktury podle definovanΘho nßzvu. Pokud tedy vytvo°φme t°φdu JosefNovak.Projekty.cAuto musφme ji ulo₧it do adresß°ovΘ struktury JosefNovak/Projekty/cAuto.as.

Flash takΘ obsahuje nastavenφ, kter²m m∙₧eme ovlivnit umφst∞nφ t°φd. Ve v²chozφm nastavenφ Flash nejprve prohledß adresß° Classes, kter² nalezneme v instalaΦnφm adresß°i a potΘ ve slo₧ce se samotn²m projektem. Vlastnφ adresß°e m∙₧eme p°idat nastavenφm pomocφ Edit -> Preferences ->ActionScript -> ActionScript 2.0 Settings.

Nynφ bude Flash vyhledßvat v adresß°ovΘ struktu°e "C:\Tridy".

Abychom nemuseli v₧dy p°i vytvß°enφ instance vypisovat celou cestu nap°φklad: "JosefNovak.Projekty.cAuto", m∙₧eme vyu₧φt klφΦovΘho slova import:


// Nßzev t°φdy
import JosefNovak.Projekty.cAuto;

// nebo takΘ pro import vÜech t°φd
import JosefNovak.Projekty.*

// Vytvo°φme instanci t°φdy
var auto:cAuto = new cAuto();
auto.Typ = "Peugeot";

// Zobrazφme obsah prom∞nnΘ
trace(auto.Info());

P°φstup k metodßm a prom∞nn²m (Private, Public)

Pomocφ modifikßtor∙ Private a Public m∙₧eme ovlivnit viditelnost metod a prom∞nn²ch v t°φdßch. V minulΘ verzi ActionScriptu byly vÜechny prom∞nnΘ a funkce p°φstupnΘ zvenΦφ (Public), nynφ jejich viditelnost a prßci s nimi m∙₧eme ovlivnit pomocφ t∞chto modifikßtor∙.

Modifikßtorem Private nastavφme, ₧e p°φstup k funkci nebo prom∞nnΘ bude pouze uvnit° t°φdy. Modifikßtorem Public nastavφme p°φstup odkudkoliv.


class cAuto {
	private var Typ:String;	
	function cAuto(typ:String) {
		Typ = typ;
	}
	
	public function Info():String {
		return Typ;
	}
}
// Vytvo°φme instanci t°φdy
var auto:cAuto = new cAuto();
auto.Typ = "Peugeot";

// Zobrazφme obsah prom∞nnΘ
trace(auto.Info());

Pokud bychom se tedy pokusili manipulovat s hodnotou prom∞nnΘ Typ, zobrazil by kompilßtor nßsledujφcφ hlßÜenφ:


**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 3: The member is private and 
 cannot be accessed.
     auto.Typ = "Peugeot";

Total ActionScript Errors: 1 	 Reported Errors: 1

Sprßvn∞ by to tedy m∞lo vypadat nßsledovn∞:


// Vytvo°φme instanci t°φdy
var auto:cAuto = new cAuto("Peugeot");

// Zobrazφme obsah prom∞nnΘ
trace(auto.Info());

StatickΘ metody a prom∞nnΘ

StatickΘ metody a prom∞nnΘ jsou takovΘ, kterΘ m∙₧eme zavolat bez vytvo°enφ instance objektu. Pro nastavenφ pou₧ijeme modifikßtor static.


class cAuto {
	static function Info():String {
		return "Typ auta";
	}
}

// Zavolßme metodu
trace(cAuto.Info());

Vlastnosti

Op∞t jako v jin²ch objektov∞ orientovan²ch jazycφch p°ichßzφ ActionScript 2 vlastnostmi. Vlastnosti odd∞lujφ a zp°ehled≥ujφ celkovΘ uspo°ßdßnφ t°φd. P°i zφskßvßnφ a nastavovßnφ hodnot vyu₧φvßme tzv. Getter a Setter metody.

Getter metoda nep°ebφrß ₧ßdn² parametr a umo₧≥uje zφskat hodnotu internφ prom∞nnΘ.


function get Typ():<< datov² typ >> {
	return << nßzev prom∞nnΘ >>;
}

Setter metoda je opakem Getter metody a umo₧≥uje nastavit hodnotu prom∞nn²ch.


function set Typ(value:<< datov² typ >>):Void {
	<< nßzev prom∞nnΘ >> = value;
}

Nynφ si ukß₧eme vÜe pohromad∞:


class cAuto {
	private var _typ:String;
		
	public function get Typ():String {
		return _typ;
	}
	
	public function set Typ(hodnota:String):Void{
		_typ = hodnota;
	}
}

// Vytvo°φme instanci t°φdy
var auto:cAuto = new cAuto();

// Nastavφme hodnotu
auto.Typ = "Peugeot";

// Zobrazφme obsah prom∞nnΘ
trace(auto.Typ);

Pozn.: klφΦovΘ slovo Void znamenß, ₧e funkce nevracφ ₧ßdnou hodnotu.


Zßv∞r


Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme pokraΦovat v povφdßnφ v poznßvßnφ ActionScriptu 2 a novinkßm ve Flashi MX 2004.

Petr Rympler