De ce contează?
Când îți organizezi camera, alegi recipientul după ce ai de pus în el: creioanele intră într-un suport, cărțile pe un raft, banii într-o pușculiță. Nimeni nu ține monedele pe raftul de cărți — ar fi un coșmar să le numeri. La fel în programare: înainte să simulezi ceva, alegi „recipientul" potrivit pentru starea lui. Recipientul bun face ca orice schimbare să fie un gest simplu; recipientul prost te pune să răscolești tot de fiecare dată.
Ce este
Ai învățat la lecția anterioară ce este starea unui sistem — fotografia completă a situației la un moment dat. Acum răspundem la întrebarea următoare: cum o ținem în memorie?
A reprezenta starea înseamnă a alege structura de date în care o stochezi. Nu există o singură variantă corectă; alegerea se face după ce anume ai de urmărit. Iată harta de la „ce urmăresc" la „ce folosesc":
| Ce ai de urmărit | Structura potrivită |
|---|---|
| o singură cantitate (un scor, un total) | o variabilă |
| valori așezate de-a lungul unei linii | un vector |
| o hartă sau o tablă 2D | o matrice |
| „elementul x este prezent?" / „de câte ori apare x?" | un vector de frecvențe sau de tip boolean |
| câteva câmpuri cu nume, legate între ele | un struct |
Regula de aur: alege reprezentarea care face evenimentele ieftine. Într-o simulare aplici mereu același tip de schimbare („mașina parchează", „lumina se aprinde"). Dacă structura aleasă transformă acea schimbare într-o singură atribuire, simularea zboară. Dacă te pune să cauți prin tot, fiecare eveniment devine scump și soluția se împotmolește.