Data trecută am învățat că o funcție este o parte de cod, definită într-un anumit fel, care este rulată ori unde în program, când o apelăm.
În Khan există câteva funcții care au comportament diferit față de funcțiile obișnuite. După cum probabil ați observat, funcția draw, folosită la crearea animațiilor, nu trebuie apelată de noi. Aceasta se apelează automat, foarte des, pentru a putea simula mișcarea obiectelor. Un alt exemplu de astfel de funcție este mouseClicked care se aplează de fiecare dată când dăm click pe spațiul de afișare al programului nostru.
Vom încerca să înțelegem de ce sunt aceste funcții tratate special. Programul scris de noi în Khan nu se rulează direct pe calculatoarele noastre. El este interpretat de platforma Khan, tot un program care la rândul lui este rulat peste browser, ca în diagrama de mai jos.
Astfel, pentru a obține comportamentul dorit de la funcția mouseClicked, platforma Khan caută această funcție în codul nostru și o apleleaza de fiecare dată când dăm click. Astfel de funcții sunt și următoarele: draw, mouseMoved, mousePressed, keyPressed etc.
Funcțiile imbricate se referă la funcții apelate din corpul altor funcții.
În exemplul de mai jos funcțiile ellipse și mouseClicked sunt imbricate, pentru că ellipse este apelată în corpul funcției mouseClicked.
Creați-vă propriul program în Khan Academy în care să copiați codul din imaginea de mai sus. Apoi modificați programul astfel încât atunci când dați click pe jumătatea de sus a ecranului să se deseneze un pătrat galben, iar pe jumătatea de jos un pătrat verde.
Data trecută am învățat că funcțiile se folosesc pentru organizarea codului și refolosirea acestuia. În continuare vom vedea că funcțiile imbricate au același scop.
Vrem să scriem un program care desenează pești galbeni, într-un acvariu, când apăsam tasta G. O soluție ar fi următoarea:
// verificăm că tasta apăsată este G SOLUȚIE GREȘITĂ var keyPressed = function() { if(key.toString() === 'g') { // scriem AICI instrucțiunile care desenează un pește galben } };
A doua soluție este să folosim funcții imbricate. Astfel, vom construi o funcție deseneazaPeste și o vom apela din keyPressed.
var deseneazaPeste = function(culoare) { SOLUȚIE CORECTĂ // scriem AICI ÎN FUNCȚIE instrucțiunile care desenează un pește de culoarea primită ca parametru }; // verificăm că tasta apăsată este G var keyPressed = function() { if(key.toString() === 'g') { // apelăm funcția deseneazaPeste deseneazaPeste(galben); } };
A doua variantă este corectă din două motive:
Am scris în Khan exemplul analizat mai sus. Programul desenează pești galbeni când apăsam tasta G și pești portocalii când dăm click.
După ce ați copiat codul din imaginea de mai sus, completați programul astfel încât, pe lângă pești portocalii și galbeni, să deseneze pești roșii când apăsam tasta R.
Întrecerea:
Grădina:
Avioanele:
Creați un joc în care un caracter, la alegere, se deplasează într-o cameră unde trebuie să adune puncte.