Fundamentele programării (V) - Swift

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 folosit blocuri de instrucțiuni pentru else și nu arată prea bine...

Spuneam în episodul anterior că e bine să folosim blocuri de instrucțiuni formate dintr-o singură instrucțiune pentru a avea cod mai ușor de citit. 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, putem să nu folosim un bloc de instrucțiuni, ci o instrucțiune condițională simplă. Se poate vedea că arată mult mai bine:

Switch

Chiar și așa, pare totuși cam complicat; ar trebui să putem mai simplu. Ni se pune la dispoziție instrucțiunea switch; 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 default, urmat de semnul : și de instrucțiunile care trebuie executate în acest caz.

Alternativele sunt cuprinse între acolade.

Să vedem exact ce înseamnă acest lucru... Problema noastră inițială poate 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 virgule, urmând ca, mai apoi, să punem semnul  :. Un astfel de cod ar putea fi:

Avem posibilitatea să precizăm chiar și intervale. Iată un exemplu:

Observăm că un interval este specificat prin limita ta inferioară, urmată de trei puncte (trei semne .) și de limita superioară. Există și posibilitatea de a preciza faptul că limita superioară nu face parte din interval; pentru aceasta înlocuim al treilea .  cu semnul <. Următoarea secvență este echivalentă:

Operatorul condițional

De multe ori dorim să verificăm o anumită condiție booleană și, în funcție de rezultatul verificării să atribuim unei variabilă o valoare sau alta. De exemplu, am putea avea o variabilă nr care conține numere întregi și am dori să atribuim unei variabile s care conține string-uri valoarea "negativ" dacă numărul respectiv este mai mic decât zero și valoarea "nenegativ" în caz contrar (numărul este mai mare sau egal cu zero).

Putem face asta simplu:

Totuși, situația este atât de frecventă încât limbajele oferă o prescurtare și anume operatorul condițional. Acesta este interesant: are trei operanzi; nu am mai văzut așa ceva până acuma. Primul este o condiție booleană, iar ceilalți doi sunt expresii. Rezultatul aplicării operatorului este detrminat astfel: în cazul în care econdiția este îndeplinită, rezultatul este obținut prin evaluarea primeia dintre cele două expresii; altfel, rezultatul este obținut prin evaluarea celeilalte expresii; tipurile rezultatelor celor două expresii trebuie să fie compatibile.

Următoarea instrucțiune este echivalentă cu secvența anterioară:

Așadar, avem condiția, urmată de semnul ?, de prima expresie, semnul : și apoi de a doua expresie.

Cum acest operator are ca rezultat o valoare, putem folosi astfel de expresii și pentru inițializări de variabile. Următoarea inițializare este validă:

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.

Te-ar putea interesa și: