
for (int item : arr). מגדירים את סוג התאים, שם למשתנה, נקודותיים, ואז שם המערך. בכל חזרה item מקבל את הערך של התא הבא לפי הסדר.item, ולא i, כי i מזכיר אינדקס. מי שמתבלבל ומשתמש בו כאינדקס מקבל קריסה.final, וכך שינוי יתפס כשגיאת קומפילציה.הטקסט המלא של הדקות הראשונות בהרצאה «The For-Each Loop» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
קיימת לולאה נוספת על כל הלולאות שלמדנו בפרק של הלולאות שמסוגלת לרוץ על משהו שנקרא קולקשן. קולקשן זה פשוט אוסף של פריטים.
מערך נחשב קולקשן. אז הלולאה המיוחדת הזאת נקראת לולאת for each והיא מסוגלת רק לרוץ על קולקשנים. אי אפשר סתם ככה להגיד לה תרוצי לי בבקשה שבע פעמים או תרוצי כל עוד המשתמש מכניס נתונים חיוביים וכדומה.
בשביל זה היה לנו את while, do while ו-for. אבל אם יש לנו קולקשן ודוגמא מערך חד-ממדי, אנחנו יכולים לבצע עליו סריקה גם עם לולאת for each, ובהרבה מקרים זה הרבה יותר פשוט מבחינת קוד לביצוע.
בואו ניקח מערך, ניקח מערך מספרים, נקרא לו arr, אדיר שהוא שווה לניו אינט וניתן לו גודל 10. כעת נרוץ בלולאה רגילה כי עדיין אין בו פריטים ונכניס בתוכו ערכים שונים.
הנה יש לנו פה לולאה שמבצעת סריקה של כל המערך. אנחנו מגיעים לכל אחד מהפריטים של המערך ואנחנו רוצים להכניס לדוגמה את i כפול i. כעת מה שאני רוצה לעשות זה לרוץ על כל המערך הזה ולהציג אותו.
זה הכל, רק להציג. הדבר הראשון שאני אעשה, אני ארוץ עליו בלולאת for בכדי לבצע השוואה עם לולאת for each שאני אבנה ממש לאחר מכן.
אז אם אני אבצע את הסריקה בעזרת לולאת for רגילה, יש לנו int i שווה 0, i קטן מ-arr.length, i++, ואנחנו רוצים לבצע תצוגה של array על i.
נשרשר אותו עם רווח, נוריד ln, ונרד שורה בסוף. אם אנחנו נריץ את זה אנחנו נגיע לכל הערכים של המערך, שזה בעצם האינדקס בריבוע 0, 1, 4, 9, 16 וכדומה.
בואו מתחת לזה נרוץ בלולאת for each ותסתכלו כמה היא הרבה יותר פשוטה כאשר אנחנו רוצים לבצע סריקה של מערך. לולאת for each נכתבת בצורה הבאה, קודם כל היא נכתבת גם כן על ידי for, אבל התחביר שלה טיפה שונה.
ראשית, אנחנו מגדירים את הסוג של כל אחד מתאי המערך. זה יהיה כמובן int. הדבר הבא, אנחנו ממציאים שם.
זה שם מומצא. אני אמציא אייטם, אבל הוא יכול להיות כל שם שאתם רוצים. מה זה השם הזה? זה שם של משתנה, זה כאילו שפתחנו פה משתנה.
אבל גם כאן פתחנו משתנה. ה-i הופך להיות אינדקס, שדרכו אנחנו מגיעים לערך אבל האייטם זה כבר הערך זה כאילו שarr על i שהיה בדוגמה הקודמת שווה לאייטם או אייטם יקבל את arr על i אפילו שאין לי בלולה הזאת שום קשר לאינדקס.
אז המשתנה שאנחנו פותחים פה זה כל אחד מערכי ה-collection במקרה הזה מערך חד-ממדי מערכי המערך לפי הסדר, תוך כדי הסריקה של המערך.
לאחר מכן אנחנו רושמים נקודתיים, זה חלק מהתחביר, ולבסוף את השם של האוסף עצמו, שזה שם המערך ARR. עכשיו אייטם הוא הפריט עצמו, זאת אומרת שאנחנו כבר כאן יכולים להציג רק את האייטם מבלי להציג בכלל התעסקות עם האינדקס שלו.
בואו נריץ ונראה שקיבלנו את אותו הדבר בשני המקרים. אז מה שלא נכון לבצע זה לקרוא למשתנה הזה i כי למרות שאני יכול להמציא כל שם שאני רוצה ואם אני אריץ את זה עכשיו זה גם יעבוד, ברגע שקראתם לו i אתם יכולים להתבלבל ולחשוב שזה אינדקס ואז בטעות לרשום את הדבר הבא וזה כמובן יכול לגרור לקריסה.
אם אנחנו נריץ את זה עכשיו, אנחנו נראה משהו מעניין. אנחנו נראה שההתחלה הודפסה לנו, 0, 1, 16, 81, ומייד אחר כך קריסה.
למה? מפני שבפעם הראשונה ה-i היה 0, אז arr במיקום 0 זה 0,