Introducere în Programare

Capitolul 2: Lecții
Funcții

Cel mai mare păcat în programare este codul duplicat.

– Cornel (autorul acestui curs)

Am învățat lecțiile trecute cum să repetăm cod, folosind while și for. Folosind aceste instrucțiuni, putem să scriem cod care se repetă imediat de câte ori e nevoie. Dar ce ne facem dacă vrem să repetăm cod și mai târziu? Prin funcții, putem să avem cod care să ruleze oricând.

Pentru a folosi o funcție, trebuie să o creăm și să diferențiem cumva instrucțiunile funcției de alte instrucțiuni care vrem să fie executate imediat. Crearea unei funcții este denumită declarare. Atunci când folosim funcția, pentru a executa instrucțiunile sale, asta se mai numește și apelare. Voi folosi acești termeni în continuare.

Diferite limbaje pot avea moduri diferite de declararea a unor funcții, da în cel înțeles de Miorița, o funcție se declară așa:

                    function numele_functiei(/* Parametri */) {
    // Instrucțiuni
}

// Această funcție va fi apelată așa:
numele_functiei()
                
Declarare și apelare

Dacă ți se pare că ai mai văzut pe undeva ceva asemănător cu apelarea unei funcții, nu e întâmplător. Am mai folosit la instrucțiunile prin care controlăm direct Miorița, move(), turnRight(), etc.

Acelea sunt la rândul lor funcții, doar că au fost create de către autorul limbajului.
De obicei, limbajele de programare vin cu funcții pre-definite, care îndeplinesc sarcini comune și uneori mai complexe. Gândește-te ce ar fi însemnat să trebuiască să te gândești în detaliu cum se mută o mioriță digitală de la o căsuță la alta.

Instrucțiunile care se execută la apelarea funcției sunt mereu date într-un bloc, deci sunt înconjurate de acolade {}. De remarcat că dacă la if nu e nevoie să punem acolade atunci când avem o singură instrucțiune, la funcții trebuie puse mereu.

Conținutul continuă după reclamă

Numele funcției

Numele funcției, poate îți imaginezi că îl folosim pentru a diferenția această funcție de altele pe care poate vrem să le declarăm. Regulile pe care trebuie să le respectăm atunci când alegem un nume, sunt asemănătoare celor pentru variabile:

  • Pot conține litere a-z, cifre 0-9, și caracterul _

  • Numele nu poate începe cu cifră

  • Literele mari sunt diferite de cele mici.

Bine, în acest caz, chiar sunt aceleași reguli ca la variabile, dar unele limbaje pot avea alte reguli.

Parametri

O funcție poate avea opționali ceva numit parametri. Acestea sunt valori pe care le dăm atunci când apelăm funcția, și sunt altfel asemănători unor variabile. Parametri sunt separați prin virgulă și valorile pe care le dăm la apelare sunt asociate „variabilelor” pe care le definim la declarare.

                    // Declarare
function order(prefered, backup){}
// Apelare
order("sushi", "pizza")
                
Funcție cu parametri

În exemplul alăturat, variabila
preferred va avea valoarea "sushi",
în timp ce
backup va avea valoarea "pizza"

Chiar și când nu avem nevoie de parametri, va trebui să punem paranteze, atât la declarare, cât și la apelarea funcției.

Întoarcerea

Funcțiile mai pot fi folosite pentru a genera date. Am văzut exemplul funcției canMove(), care (prin magie neagră) ne spune dacă Miorița are culoar liber în față. Putem face și funcțiile create de noi să ne dea date pe care să le folosim acolo unde le apelăm.

                    function bigger(a, b) {
    if (a > b) return "Primul"
    if (a < b) {
        return "Al doilea"
    }
    return "Niciunul nu"
}

// "Primul e mai mare"
bigger(2, -9) + " e mai mare"

// "Al doilea e mai mare"
bigger(2, 9) + " e mai mare"

// "Niciunul nu e mai mare"
bigger(2, 2) + " e mai mare"
                
Funcție cu întoarcere

Pentru a produce date, folosim instrucțiunea return, urmată de valoarea dorită. Din acest motiv, se mai numește și că o funcție întoarce date.

Putem folosi return oriunde în corpul unei funcții, inclusiv în blocuri de instrucțiuni, sau ca unică instrucțiune a unui if.

Atunci când am dat return, nu se mai execută nicio altă instrucțiune din funcție.

Atunci când avem return într-un if, nu mai e nevoie să folosim else, pentru că funcția se va opri imediat.

Mai putem folosi return fără nicio valoare după, dacă pur-și-simplu vrem să se oprească funcția, și nu ne interesează să întoarcă date.

Conținutul continuă după reclamă

Temă

Având cât mai puțin cod duplicat, în lecția 4 din aplicație, du-o pe Miorița până la baltag și înapoi la baltag. Poți folosi funcțiile pick("hatchet") și drop("hatchet") pentru a ridica baltagul și respectiv pentru a-l arunca.

Designed by