Ce este o functie si de ce ai nevoie de ea?
O functie (sau subprogram) este un bloc de cod cu un nume pe care il poti apela (chema) ori de cate ori ai nevoie, fara sa rescrii codul.
Gandeste-te asa: in loc sa copiezi aceleasi linii de cod in 5 locuri, le scrii o singura data intr-o functie, si apoi doar chemi functia de 5 ori.
Cand vrei sa faci prajituri, nu inventezi reteta de fiecare data. O scrii o data pe o foaie si apoi o folosesti ori de cate ori vrei sa gatesti. Reteta este functia. A gati dupa reteta este apelarea functiei.
Daca vrei sa schimbi cantitatea de zahar, modifici doar reteta, nu toate prajiturile pe care le-ai facut vreodata!
De ce repetarea codului e o problema grava
Cand copiezi acelasi cod in mai multe locuri, se intampla 3 lucruri rele:
| Problema | Ce se intampla concret |
|---|---|
| Bug multiplicat | Gasesti un bug intr-o copie. Il repari. Dar ai uitat ca exista inca 2 copii cu acelasi bug. Programul tot nu merge. |
| Cod greu de citit | 200 de linii de cod cu blocuri repetate vs. 50 de linii cu functii clare. Care e mai usor de inteles? |
| Timp pierdut | Orice modificare trebuie facuta in N locuri. Cu o functie, o faci o singura data. |
Ce inseamna void?
Cuvantul void inseamna "nimic" sau "gol". O functie void este o functie care face ceva (afiseaza text, deseneaza pe ecran, etc.) dar nu returneaza un rezultat.
Gandeste-te la diferenta: un cuptor face prajitura (returnare) - primesti ceva inapoi. Un aspirator curata (void) - face treaba, dar nu iti "da" ceva inapoi.
Apelarea = chemarea functiei
Ca sa "chemi" o functie, scrii numele ei urmat de paranteze si punct si virgula:
Definirea functiei = scrierea "retetei" (o faci o singura data).
Apelarea functiei = folosirea "retetei" (o faci de cate ori vrei).
O functie pe care o definesti dar nu o apelezi niciodata este ca o reteta pe care o scrii dar nu o gatesti niciodata - codul din ea nu se va executa.
Fiecare functie face UN singur lucru
Un program bine scris este ca o echipa: fiecare membru (functie) are un rol clar. Nu pui un singur om sa faca totul!
Regula: daca poti descrie ce face functia intr-o singura propozitie, atunci e bine definita.
Regula de plasare: functia INAINTE de apel
In C++, functia trebuie sa fie definita inainte de locul unde o apelezi. De obicei, scriem functiile deasupra lui main().