webroad.online
  1. 1Web
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Unelte
  8. 8React
  9. 9State management
  10. 10Next.js
  11. 11Formulare
  12. 12Date și backend
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Animații
  16. 16Testare
  17. 17Arhitectură
JavaScript · Lecția 2 din 17

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, throw ies 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 de switch lung.
  • for...of pentru colecții, for clasic pentru indici, while pentru condiții.
  • forEach nu se poate opri; metodele de array sunt pentru transformări.

Surse oficiale

Exerciții

Ți-a fost utilă pagina?

Un click — fără cont.