בקוד Production אמיתי, לולאה אינסופית לא נראית כמו while (true). היא נראית כמו while (queue.length > 0) כש-queue מקבל פריטים חדשים בקצב מהיר מהביעור שלה. או for (let i = 0; i <= arr.length; i++) - שים לב ל-<= במקום <. זה Off-by-one error: הלולאה תרוץ פעם אחת מדי, תגיש arr[arr.length] שהוא undefined, ו-TypeScript ללא הגדרות מחמירות לא יצרח. תגלו את זה כשמשהו מתנהג מוזר ב-data.
לולאות הן מבנה שמשתמשים בו ב-90% מהקוד. לבחור את הלולאה הנכונה זה לא רק נוחות - זה גם ביצועים, קריאות, ולפעמים תיקון באגים שלא קיימים עם הכלי הנכון.
for...of vs forEach - ההבדל הקריטי
for...of
הברירה המודרנית
תומך ב-break ו-continue
עובד עם async/await כצפוי
איטרציה על כל Iterable (Set, Map, String)
אין גישה ישירה ל-index (חייב entries())
forEach
פשוט אך מוגבל
תחביר תמציתי עם callback
index מועבר כפרמטר שני
אין break - חייבים לעבור על הכל
await בתוך callback לא מחכה
Array iteration patterns - performance
O(1)
Direct index access - arr[5]
EXCELLENTO(n)
Single forEach / map / filter
OKO(n + m)
Hash lookup join (Set/Map)
GOODO(n²)
Nested loop find - listA.map(a => listB.find(...))
POOR