Introducere în Programare

Capitolul 2: Lecții
Variabile

Variabilele ne permit să stocăm date în memoria RAM a calculatorului.

Ne putem gândi la memoria calculatorului ca la o comodă cu sertare. Putem pune diferite date în acele sertare și le vom putea citi oricând. Calculatorul este un intermediar pentru acele sertare. Lui îi spunem ce să scrie în fiecare sertar, și tot lui îi cerem să ne spună ce există în sertare.

Dacă ne imaginăm comode pe care le avem acasă, poate ne-am imagina că e destul de ușor să îi cerem să se ducă la dulapul 12, să ne spună ce e în sertarul 7, dar calculatoarele moderne au miliarde de astfel de sertare. Acei bytes (octeți în română) pe care îi vedem în specificațiile calculatoarelor sunt câte un sertar. Un gigabyte (GB) înseamnă un miliard (1000.000.000) de bytes. Cele mai slabe telefoane din zilele noastre au pe la 4 gigabytes, în timp ce calculatoarele mai performante au cel puțin 32 de GB.

Sper că îți dai seama cât de greu ar fi dacă ar trebui să lucrăm cu numărul de ordine al acelor sertare. Și ce s-ar întâmpla dacă nu știm când ne trebuie un sertar sau nu? De exemplu dacă avem nevoie de un sertar doar în cazul în care o condiție este adevărată (if).

Ar fi mai ușor dacă în loc să ne preocupăm noi de acel număr de ordine, să folosim denumiri alese de noi. Ne gândim la un nume și i-l spunem calculatorului. Calculatorul va alege un sertar liber și de fiecare dată când îi spunem numele, va citi valoarea din sertar. În programare, acest nume pe care l-am ales pentru sertar se numește variabilă.

În limbajul înțeles de Miorița, creăm o variabilă folosind cuvântul var, urmat de numele pe care l-am ales pentru acea variabilă.

                    var numele_variabilei
                
Declarare

Sunt câteva reguli pentru acest nume:

  • Poate conține litere a-z, cifre 0-9, și caracteru _

  • Numele nu poate începe cu cifră

  • Literele mari sunt diferite de cele mici.

În multe alte limbaje, se folosește altceva decât var. Va trebui să studiezi limbajul pe care vrei să îl înveți pentru a înțelege cum se declară o variabilă. Există inclusiv limbaje în care nu trebuie să o declarăm noi când programăm, ci putem să o folosim direct. Acesta pare un lucru bun, dar poate duce uneori la erori de cod dacă nu suntem atenți.

Conținutul continuă după reclamă

Având declarată variabila, îi putem da o valoare. Continuând metafora de mai sus, e ca și cum i-am spune calculatorului ce să pună în sertarul pe care l-a rezervat pentru această variabilă.

În limbajul pe care îl folosim, asta se face punând numele variabilei, urmat de = și apoi valoarea pe care vrem să o punem în memorie.

                    numele_variabilei = "valoare"
                
Setare

Când punem prima dată ceva în memoria asociată unei variabile, această operație se numește inițializare. De foarte multe ori, vom vrea să inițializăm o variabilă imediat ce am declarat-o.

De aceea, vei vedea și (sper) folosi de foarte multe ori sintaxa prescurtată, care combină cele două instrucțiuni:

                    var numele_variabilei = "valoarea inițială"
                
Declarare și inițializare

Ce putem pune în memorie?

Diferite limbaje de programare îți pot permite să pui diferite tipuri de date în memorie. Cele mai comune sunt:

  • Numere întregi pozitive (0, 1, 2, 3, ..., ∞) și negative (-1, -2, -3, ..., -∞). În funcție de limbaj, acestea pot fi numite în engleză integer sau prescurtat int.

  • Numere fracționare (de exemplu 3.14). Datorită modului în care sunt stocate efectiv în memorie, acestea pot fi numite float (cu virgulă flotantă) sau double (dublă precizie).

  • Valoarea de adevărat true sau fals false a unei expresii. Numită și boolean, de la matematicianul George Boole, care a inventat algebra bazată pe aceste valori, și care permit calculatoarelor să facă tot ce fac.

  • Caractere de text. Adică litere a-zA-Z, cifre 0-9, dar și semne ~!@#$%^&*()_+- sau chiar emoji 😲. Pentru a nu fi confundate cu alte semne pe care le folosim în cod, acestea trebuie înconjurate într-un fel. În unele limbaje, vor fi înconjurate prin apostrofuri 'x'.
    Dacă trebuie să reprezentăm însăși apostroful ca și caracter, unele limbaje ne vor cere să punem '\''. În altele, poate fi altceva.

  • Șiruri de caractere, numite în engleză string. Acestea pot fi marcate prin apostrofuri duble "exemplu", dar în alte limbaje pot fi marcate la rândul lor cu apostrofuri simple 'exemplu'. Există chiar limbaje în care ambele notații sunt acceptate, uneori cu diferențe, alteori fără.

Conținutul continuă după reclamă

Operații

Dacă în dreapta egalului punem o expresie (de exemplu 1+2), aceasta se evaluează, adică se găsește valoarea rezultată (în exemplul de mai devreme, aceasta va fi 3) și se pune în memorie.

Putem pune în dreapta inclusiv instrucțiuni care produc valori, precum canMove() de la Miorița, care produce un boolean. Valoarea produsă va fi pusă în memorie la momentul în care se evaluează.

                    iteratie = iteratie + 1
                

Dar cel mai ciudat este că în expresia din dreapta putem pune însăși variabila pe care o setăm, dacă aceasta a fost setată în prealabil.

Este o expresie care șochează matematicienii, dar programatorii o folosesc în mod regulat.

Operații matematice

În toate limbajele se pot face cele 4 operații matematice pe care le-am învățat în clasele primare:

  • Adunare prin +

  • Scădere prin -

  • Înmulțirea se face prin *, pentru că pe majoritatea tastaturilor nu există caracterul de înmulțire ⨉ și nici nu putem folosi litera x pentru că pot apărea confuzii.

  • Împărțirea se face prin /, din motiv similar. Nu avem ÷ de obicei pe tastatură.

În unele limbaje pot exista și alte operații mai avansate, precum ridicarea la putere, dar am observat diferite notații pentru acestea și în practică sunt foarte rar folosite.

Prescurtări

Există un tip mai ciudățel de operații prin care putem modifica valoarea unei variabile, folosind valoarea curentă. Este un mod de a evita să avem variabila și în stânga și în dreapta semnului =. În schimb, avem semnul prin care vrem să modificăm variabila înaintea egalului.

                    i+=7 // i = i + 7
i-=7 // i = i - 7
i*=7 // i = i * 7
i/=7 // i = i / 7
                

Pe lângă acestea, mai există și semnele ++ și --, pe care le punem după variabilă, pentru a adăuga sau scade exact valoarea 1 din valoarea curentă a variabilei.

                    i++ // i = i + 1
i-- // i = i - 1
                

Asemenea prescurtări sunt disponibile în mai multe limbaje de programare, nu în toate. În limbajul Mioriței, sunt disponibile, dar am să încerc să nu le folosesc pentru a fi mai clar.


Comparații

Putem face comparații, fie între numere, fie între alte tipuri de valori. Acestea vor produce un boolean, pe care îl vom putea folosi la if sau oriunde avem nevoie de un boolean care să rezulte din compararea a două valori. Operatorii de comparație sunt:

  • Egalitate ==. Se folosesc de obicei două semne egal, pentru a nu exista confuzie cu unul singur, care este folosit pentru a seta valoarea unei variabile. Acest test funcționează de multe ori pe orice tip de date folosim.

  • Inegalitate != în foarte multe limbaje, dar am văzut și limbaje care folosesc altă combinație de semne precum <>. Acest test funcționează de multe ori pe orice tip de date folosim.

  • Mai mic < și Mai mare >. Are de obicei sens doar pentru numere, dar pot fi limbaje în care pot fi comparate stringuri, poate pentru a testa dacă sunt în ordine alfabetică.

  • Mai mic sau egal <= și Mai mare sau egal >= folosesc câte două semne, pentru că semnele obișnuite ⩽ și ⩾ nu există pe tastatură.


Operații logice booleene

Valorile booleene au propriul set de operații, prin care putem face algebră booleană. Sună mai pompos decât e. De fapt, sunt expresii logice destul de ușor de reținut.

Și &&

Operatorul și înseamnă că ambele valori, din stânga și dreapta sunt adevărați. De multe ori operatorul și este reprezentat prin combinația &&, dar pot fi și alte semne în unele limbaje.

aba && b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

Sau ||

Operatorul sau înseamnă că cel puțin una din valori este adevărată. De multe ori este reprezentat prin combinația ||, dar pot fi și alte semne în unele limbaje.

aba || b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

Negare !

Am folosit deja operatorul de negare. Face ca valoare ce vine imediat după să fie inversată.

a!a
truefalse
falsetrue

Operații cu string

Unele limbaje permit chiar și operații pe stringuri. De exemplu "B" + 3, ar produce stringul "B3". Această operație se numește concatenare. Însă există limbaje în care concatenarea se face într-un mod diferit.

Designed by