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").

Functii testClip

1. Setare parametri cu valoare fixa

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.
Testati rezultatul apasand "Ctrl+Enter", dreptunghiul din scena va fi mutat la distanta "y=10" si rotit 45 grade, dupa cum e scris in codul functiei (precum se vede in imaginea urmatoare).
Functii parametru fix
- Observati ca la apelare "testF(10)" e transmis doar un singur argument (10), pentru "dy", desi functia are 2 parametri, al doilea "rotatie" are deja valoare si e transmisa automat la codul din ea.
- Daca se specifica la apelarea functiei un argument si pentru parametrul fix, valoarea argumentului transmis va inlocui pe cea setata la parametru. Incercati de ex.: "testF(10, 8);", 8 va inlocui valoarea 45 de la "rotatie".

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).

2. Utilizare (... parametru)

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".
- "width" si "height" sunt proprietati pentru lungime si inaltime.
Testati rezultatul apasand "Ctrl+Enter". Figura din scena va deveni patrat (precum se vede in imaginea de mai jos), cu latura egala cu suma argumentelor transmise (8+20+40+50 = 118).
Exemplu rest parameters

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".

3. Definire functie direct in variabila

O alta metoda de a crea o functie este aceea de a fi definita direct intr-o variabila de tip "Function".
Sintaxa generala este:

- Aceasta forma a functiei se apeleaza normal, cu numele variabilei si argumentele intre paranteze rotunde, numeFunctie(arg1, arg2, ...);
- Diferentele fata de crearea standard a unei functii sunt urmatoarele: Studiati si testati singuri urmatorul exemplu (in documentul Flash creat la inceput, cu instanta "testClip").
// 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.

4. Variabile si functii

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.
- Dar daca se sterg caracerelr "//" de la "trace(in_vr);" afiseaza eroare deoarece variabila "in_vr" nu exista in afara functiei.

5. Functii recursive

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)

- Fisierele FLA cu exemplele din aceasta lectie pot fi descarcate de la:
  1. Functii cu parametru fix
  2. Functii cu "rest parameters"
  3. Functii in variabile
  4. Functii si variabile
  5. Functii recursive

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care meta tag se foloseste pentru scurta descriere a paginii?
<meta content="..."> <meta description="..."> <meta http-equiv="...">
<meta name="description" content="70-160 caractere ce descriu continutul paginii" />
Ce proprietate CSS opreste efectul dat de "float"?
clear text-align position
#some_id {
  clear: both;
}
Clic pe metoda ce creaza un array cu toate elementele din pagina cu un anumit nume de tag.
getElementsByName() getElementById() getElementsByTagName()
var divs = document.getElementsByTagName("div");
var nr_divs = divs.length;
alert(nr_divs);
Indicati functia PHP ce returneaza numarul de elemente dintr-un array.
is_[) count() strlen()
$arr =[7, 8, "abc", 10);
$nri = count($arr);
echo $nri;        // 4
Indicati adverbul corespunzator adjectivului din paranteza in propozitia: "I live (happy)".
happly happily hapily
I live happily.
- Traiesc fericit (in mod fericit).
Indicati adverbul corespunzator adjectivului din paranteza in propozitia: "Vivo (feliz)".
felizamente felizmente felices
Vivo felizmente.
- Traiesc fericit (cu fericire).
Functii - Utilizare avansata

Last accessed pages

  1. Verbe modale - Modal verbs - CAN, COULD, MAY, MIGHT, MUST (27318)
  2. Gramatica limbii engleze - Prezentare Generala (105255)
  3. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (37194)
  4. Creare link-uri (6502)
  5. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (55427)

Popular pages this month

  1. Prezentul simplu si continuu - Present Tense Simple and Continuous (3396)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (2782)
  3. Gramatica limbii engleze - Prezentare Generala (2520)
  4. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (2182)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (1794)