Fundamentele programării (V) - Scala

Am văzut în cadrul episodului anterior cum pot lua programele decizii în funcție de circumstanțe, cum se execută o instrucțiune sau alta în funcție de anumite condiții. În cadrul acestui episod vom continua prezentarea modului în care sunt luate decizii.

Mai multe variante

Până acum doream să se execute anumite instrucțiuni dacă o anumită condiție era adevărată și altele dacă era falsă. Dar, ce am face dacă nu avem doar două variante, ci mai multe.

Să ne imaginăm o situție în care dorim să scriem cifrele folosind litere. Avem o variabilă c care ar trebui să conțină o cifră. Dacă valoarea este 1, ar trebui să scriem string-ul "unu"; dacă valoarea este 2, ar trebui să scriem "doi" și așa mai departe. Variabila conține numere, deci probabil nu va avea neapărat valori cuprinse între zero și nouă; în cazul în care valoarea nu este o cifră, am vrea să scriem textul "nu este o cifră".

Cea mai simplă variantă este să comparăm, pe rând, valoarea variabilei c cu fiecare cifră și să scriem mesajul corespunzător în cazul în care identificăm cifra; începem comparând cu zero; dacă am găsit valoarea scriem textul "zero"; dacă nu am găsit-o încercăm să comparăm cu unu și așa mai departe; dacă am ajuns la nouă și tot nu am găsit cifra, putem concluziona că nu avem o cifră. Codul ar arăta astfel:

Am respectat recomandarea de a folosi blocuri de instrucțiuni chiar dacă avem o singură instrucțiune și nu arată prea bine...

Trebuie să ne obișnuim ca, în funcție de situație, să avem recomandări, excepții de la recomandări, excepții de la excepții etc. De data aceasta recomandarea nu a dus la ceva bun, deci vom introduce o excepție (tot sub formă de recomandare). Avem aici o succesiune if, else, if, else, if, else, etc. În situația în care pe ramura else avem doar un if, noua recomandare este să nu folosim un bloc de instrucțiuni, ci o instrucțiune condițională simplă. Se poate vedea că arată mult mai bine:

Match

Chiar și așa, pare totuși cam complicat; ar trebui să putem mai simplu. Ni se pune la dispoziție instrucțiunea match; aceasta seamănă cu instrucțiunea if, dar are mai multe "ramuri"; în locul condiției avem o expresie. Putem apoi specifica instrucțiunile care trebuie executate pentru fiecare valoare în parte; de asemenea, putem specifica instrucțiuni care să se execute în cazul în care nu se potrivește nicio valoare.

Fiecare alternativă este specificată folosind cuvântul case, urmat de o valoare, apoi de semnul => și, în sfârșit, instrucțiunile care trebuie executate. Pot fi mai multe instrucțiuni; acestea nu trebuie grupate într-un bloc.

Putem specifica și o ultimă alternativă (nicio valoare nu se potrivește) folosind cuvântul case, urmat de valoarea _, apoi de semnul => și de instrucțiunile care trebuie executate în acest caz.

Alternativele sunt cuprinse între acolade.

Să vedem exact ce înseamnă acest lucru... Pe baza celor prezentate, ne așteptăm ca problema noastră inițială să poată fi rezolvată folosind următorul cod:

Dacă am avea valoarea 4, va fi afișat textul "patru".

Dacă dintr-un motiv sau altul, avem de făcut același lucru pentru mai multe valori, atunci, după cuvântul case punem lista de valori separate prin semnul  |, urmând ca, mai apoi, să punem semnul  =>. Un astfel de cod ar putea fi:

Va urma

În următorul episod vom introduce conceptul de funcție. Vom vedea cum putem grupa instrucțiunile și cum putea evita să scriem același lucru de mai multe ori.