In aceasta lectie sunt prezentate lucruri mai avansate legate de utilizarea functiilor, ca o a doua parte a lectiei precedente.
Deoarece scopul utilizarii Flash e acela de a afisa intr-un player sau pagina web efecte vizuale si animatii, in exemplele prezentate in aceasta lectie e folosita instanta unui obiect Movie Clip din Scena (metoda mai atragatoare decat testarea in Output, cu "trace()").
Inainte de a trece la studierea si testarea exemplelor, deschideti un document Flash nou, desenati in Scena un dreptunghi pe care-l transformati in Movie Clip (din meniul Modify -> Convert to Symbol, iar la Type alegeti Movie Clip). In panoul Properties dati numele de instanta testClip dreptunghiului din Scena (in caseta unde apare "<Instance Name>, dupa cum este in imaginea urmatoare").
In ActionScript 3 se pot seta parametrii unei functii cu valoare fixa, similar cu definirea unei variabile.
Acest lucru face ca sa nu mai fie necesar adaugarea unui argument pentru acel parametru la apelare, parametrul fix va fi transmis automat codului dintre acolade.
Iata un exemplu (codul va fi aplicat in documentul creat mai sus, cu Instanta "testClip", de tip MovieClip).
- Click-dreapta pe primul Cadru din Timeline si alegeti Actions, se deschide fereastra pentru ActionScript, in care adaugati urmatorul cod:
// Se creaza o functie cu doi parametri, al doilea cu valoare fixa function testF(dy:Number, rotatie:int = 45):void { // Se aplica valorile parametrului la proprietatile "y" si "rotation" a Instantei din Scena testClip.y = dy; testClip.rotation = rotatie; } testF(10); // Se apeleaza functia- Cu "testClip.y" se defineste distanta Y, fata de latura de sus, iar "rotation" este o proprietate pentru setare (adaugare) rotire.
Important - La o functie cu mai multi parametri (fixi si variabili), cei fixi trebuie scrisi mereu la urma, dupa cei variabili.
- De ex.:
function testF(dy:Number, rotatie:int = 45, dx:Number)
nu e valida deoarece dupa "rotatie" (care e cu valoare fixa) urmeaza "dx" (care e variabil).
In ActionScript 3 e adaugata o noua facilitate pentru functii, denumita "rest parameters" (resturi de parametri).
Acest "rest parametrs" e un simbol trei-puncte (...) ce reprezinta un numar variabil de parametri ca un Array, urmat de un nume pentru acel Array.
Aceasta permite apelarea functiei cu oricati parametri se doreste, fiind toti stocati intr-un Array.
- Despre Array vor fi prezentate mai multe explicatii in lectiile urmatoare.
Iata un exemplu (codul va fi aplicat in documentul creat la inceput, cu Instanta "testClip", de tip MovieClip).
- Click-dreapta pe primul Cadru din Timeline si alegeti Actions, se deschide fereastra pentru ActionScript, in care adaugati urmatorul cod (daca exista deja alt cod AS3, stergeti-l):
// Se creaza o functie cu un "rest parameters" function testF2(... numere):void { // Se defineste o variabila in care se va adauga suma numerelor trimise ca argumente var latura:Number = 0; // Se parcurge cu "for each ... in" fiecare element din Array "numere" // La fiecare parcurgere se adauga valoarea elementului curent in "latura" for each (var num:Number in numere) { latura += num; } // Se defineste lungimea si inaltimea instantei dreptunghi din Scena "testClip" // cu valoarea variabilei "latura", obtinuta din suuma argumentelor testClip.width = latura; testClip.height = latura; } testF2(8, 20, 40, 50); // Se apeleaza functia, cu mai multe numere ca argumente- Vaorile transmise functiei la apelare sunt continute in Array-ul denumit "numere".
Pe langa symbolul "rest parameters" (...) pot fi adauati si parametri normali. La apelare si executia functiei toti parametri (inclusiv cei normali) vor fi stocati in Array-ul pt. "rest parameters".
O alta metoda de a crea o functie este aceea de a fi definita direct intr-o variabila de tip "Function".
Sintaxa generala este:
// Se creaza o functie tip-variabila, denumita "vrF", cu 3 parametri var vrF:Function = function (obj:MovieClip, sx:Number, sy:Number):* { // "obj" reprezinta instanta de tip MivieClip a unui obiect din Scena, transmis ca parametru // la "obj" se definesc /modifica proprietatile "scaleX" si "scaleY" obj.scaleX = sx; obj.scaleY = sy; } // Se apeleaza functia, transmitand ca argument pt. "obj" numele instantei din Scena vrF(testClip, 2.5, 1.4);- Proprietatile "scaleX" si "scaleY" multiplica lungimea si inaltimea obiectului (aici "obj") de atatea ori cat este valoare lor.
Indicat este totusi utilizarea formei standard.
Variabilele care sunt declarate in afara unei functii, inaintea ei, pot fi utilizate si in codul functiei.
Variabilele care sunt create in interiorul functie pot fi folosite doar in cadrul ei, in afara acelei functii ele nu exista. Acestea se numesc "variabile locale".
Studiati urmatorul exemplu:
var ext_vr:int = 18; // Variabila definita in afara oricarei functii // Creare functie care foloseste variabila externa "ext_vr", din afara ei function oFunctie():Number { // Se creaza o variabila in interiorul functiei var in_vr:Number = 7; // Se adauga la aceasta si variabila externa in_vr += ext_vr; return in_vr; // Returneaza valoarea finala a lui "in_vr" } trace(oFunctie()); // Se afiseaza in Output valoarea returnata de functie (25) // Testeazaa fisarea valorii variabilei "in_vr" create in interiorul functiei (daca se sterg "//") // trace(in_vr);- Observati ca la apelare, functia a returnat 25, deoarece a folosit si valoarea lui "ext_vr", chiar daca e creata in afara ei.
Functiile recursive sunt functii care se auto-apeleaza singure in interiorul propriului cod.
O metoda buna de a demonstra capacitatea recursiva a functiilor este rezolvarea unei ecuatii factoriale, care e produsul numerelor naturale, pozitive, de la 1 pana la un anumit numar precizat (1*2*3*4*...*n).
In exemplul urmator avem o functie recursiva "factorial()" care afla factorialul unui numar precizat "n" (aici 8).
// Se defineste o functie recursiva function factorial(n:uint):uint { // Daca n>0, inmulteste 'n' cu auto-apelarea functiei if(n > 0) { return (n * factorial(n-1)); } else { return 1; } // Returneaza direct 1 cand 'n' nu e mai mare ca 0 } // Se adauga /apeleaza functia intr-o variabila; var fact:uint = factorial(8); trace(fact); // Afiseaza in Output valoarea lui "fact" (40320)- Functia verifica intai daca "n" este mai mare decat 0, apoi in caz afirmativ, "n" se inmulteste cu rezultatul returnat de auto-apelarea functiei cu argumentul "n-1". Astfel, inainte de a returna vreo valoare, functia s-a auto-apelat iar, dar cu argumentul mai mic (n-1), si tot asa, pana cand "n" ajunge 0, aparitia cea mai imbricata a functiei se incheie. Flash incheie fiecare functie imbricata pana ce ajunge la apelarea initiala a functiei "factorial", apoi intoarce rezultatul final. - In Output va afisa valoarea 40320 (1*2*3*4*5*6*7*8)
<ul> <li>http://coursesweb.net/html/</li> <li>http://www.marplo.net/html/</li> </ul>
.some_class { display: list-item; }
var obj = { "courses": ["php", "javascript", "ajax"] }; var jsonstr = JSON.stringify(obj); alert(jsonstr); // {"courses":["php","javascript","ajax"]}
$strhtml = '<body><div id="dv1">CoursesWeb.net</div></body>'; $dochtml = new DOMDocument(); $dochtml->loadHTML($strhtml); $elm = $dochtml->getElementById("dv1"); echo $elm->nodeValue; // CoursesWeb.net
I`m living here. - Traiesc /Locuiesc aici.
Estoy viviendo aquĆ. - Traiesc /Locuiesc aici.