Condiții și bucle
Early return, obiect-map în loc de switch, for...of vs for...in.
Actualizat
Ce este control flow
Implicit, codul rulează de sus în jos, linie cu linie. Control flow = instrumentele prin care schimbi asta:
- condiții — rulezi un bloc doar dacă ceva e adevărat;
- bucle — rulezi un bloc de mai multe ori;
- salturi —
return,break,continue,throwies mai devreme.
Condiții — tipuri și când le folosești
| Instrument | Când |
|---|---|
if / else |
orice decizie; ramuri cu mai multe linii |
ternar a ? b : c |
alegi între două valori într-o expresie (JSX, atribuire) |
&& |
„afișează asta doar dacă” (în JSX) |
switch |
multe cazuri pentru aceeași valoare, cu logică diferită |
| obiect-map | multe cazuri care doar mapează o valoare la alta |
if / else și early return
function shipping(total, country) {
if (total <= 0) return 0 // cazurile speciale ies primele
if (country !== 'RO') return 50
if (total >= 200) return 0
return 15
}Early return (ieșire timpurie) în loc de if imbricate: codul rămâne „plat”, iar fiecare caz e tratat și uitat.
// ✗ „săgeata” de if-uri
if (user) {
if (user.isActive) {
if (user.role === 'admin') { ... }
}
}
// ✓
if (!user || !user.isActive) return
if (user.role !== 'admin') return
...Ternarul
const label = count === 1 ? 'mesaj' : 'mesaje'Ternar în ternar (a ? b : c ? d : e) = semn că ai nevoie de if sau de un obiect-map.
switch vs obiect-map
switch (status) {
case 'success': return '✓'
case 'error': return '✗'
default: return '?'
}
// același lucru, mai scurt:
const icons = { success: '✓', error: '✗' }
const icon = icons[status] ?? '?'switch compară cu ===. Fără return sau break, execuția continuă în cazul următor (fall-through) — sursă clasică de bug-uri.
Bucle — tipuri și diferențe
| Buclă | Iterează | Poți opri cu break |
Când |
|---|---|---|---|
for (const x of arr) |
valorile unui iterabil (array, string, Map, Set) | da | parcurgi o colecție |
for (const key in obj) |
cheile unui obiect | da | rar — preferă Object.entries |
for (let i = 0; i < n; i++) |
indici | da | ai nevoie de index, pas, sau iterezi invers |
while (cond) |
cât timp condiția e adevărată | da | nu știi dinainte câte iterații |
arr.forEach(fn) |
valorile | nu | efecte simple, fără oprire |
map / filter / reduce |
valorile, creează rezultat nou | nu | transformări — vezi Array-uri |
for (const [key, value] of Object.entries(user)) {
console.log(key, value)
}
for (let i = items.length - 1; i >= 0; i--) { ... } // invers
let attempts = 0
while (!connected && attempts < 3) { attempts++ }for...in pe array-uri e o capcană: iterează chei string ('0', '1') și poate include proprietăți moștenite.
break și continue
break— iese complet din buclă.continue— sare peste restul iterației curente, trece la următoarea.
for (const order of orders) {
if (order.cancelled) continue
if (order.total > budget) break
process(order)
}Ai nevoie să te oprești la primul rezultat? find, some, every se opresc singure.
Pe scurt
if+ early return pentru decizii; ternar pentru două valori; obiect-map în loc deswitchlung.for...ofpentru colecții,forclasic pentru indici,whilepentru condiții.forEachnu se poate opri; metodele de array sunt pentru transformări.