
foreach, צריך לממש בו את הממשק IEnumerable. השיעור בונה אוסף צעצועים משלו ומראה את כל החלקים שנדרשים לכך.IEnumerable. הממשק מחייב פונקציה בשם GetEnumerator, שמחזירה אובייקט שיודע לעבור על האיברים.IEnumerator. יש לה מיקום נוכחי (position) שמתחיל ב-1-, ופונקציית MoveNext שמקדמת את המיקום ומחזירה true אם עוד יש איברים.foreach רץ, הוא קורא ל-GetEnumerator, ואז חוזר על MoveNext ו-Current עד שמגיע לסוף האוסף.MoveNext מקדם את המיקום לפני כל קריאה. כך האיבר הראשון נמצא ב-0.Current לא מחזיר את האיבר הנוכחי, הלולאה מדפיסה ערך ריק במקום את הצעצוע.הטקסט המלא של הדקות הראשונות בהרצאה «ממשק IEnumerable» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה היום אנחנו עומדים לעשות משהו מאוד מעניין אנחנו עומדים ליצור קלאס משלנו, קלאס שיהיה למעשה קולקשן אנחנו עומדים ליצור קולקשן משלנו ואנחנו עומדים לגרום לכך שאותו קולקשן יהיה אפשר להשתמש בו באמצעות הלולאה for each אז בואו ניגש רגע לקוד, יש לנו פרויקט חדש, נקרא לו קולקשן, נקרא לו custom
קולקשן, קולקשן פעם אישית, אוקיי, השם של הפרויקט הוא custom קולקשן שהוא לא קיים קולקשן קולקשן שאנחנו עכשיו יוצרים אותו ומתאימים אותו אישית לצרכים שלנו אז כמו שראינו בשיעורים הקודמים שעשינו את הדבר הבא היינו עכשיו בוא נגיד שהיינו יש לנו פה ליסט בליסט הזה יש איברים מסוג של סטרינג נקרא
להם names ונעשה new ובוא ניתן לnames כמה ערכים נעשה add avi נעשה copy paste כמה פעמים עכשיו אם אני רוצה לעבור על האיברים האלה שיש ברשימה שיש באוסף הזה שנקרא names ולדוגמה להדפיס אותם אני יכול להשתמש בלולה for each ואז כל משתנה הוא מסוג של סטרינג והוא נמצא בתוך האוסף הזה שנקרא names ואז אני ניגש אני ניגש לאיבר הנוכחי בnames
שהוא name ומדפיס אותו למסך אבל שימו לב ש name כל פעם מייצג את האיבר הנוכחי שאנחנו עוברים עליו ברשימה זאת אומרת אם עכשיו יש לנו פה שלושה איברים אז האיבר הראשון שיהיה פה שיהיה נעים זה יהיה יוסי ולאחר מכן האיבר הבא יהיה איך האיבר הראשון יהיה אבי האיבר הבא הבא לאחריו יהיה יוסי והאיבר הבא לאחריו תהיה דנה.
אוקיי בואו נריץ את זה רק כדי לראות. כן אז נכנסנו ללאה האיבר הראשון יהיה אבי האיבר הבא אחריו יהיה יוסי נעשה עוד פעם F5 הוא יגיע לאותה נקודה שוב פעם האיבר הבא יהיה דנה.
עכשיו יש פה דברים שקורים מאחורי הקלעים כן list זה קולקשן מוכן שיש לנו כבר אותו שהוא קיים ויש דברים שקורים מאחורי הקלעים שמאפשרים לקולקשן הזה אוקיי שיהיה אפשר להשתמש בו באמצעות הלולה אפורית שיהיה אפשר לעבור עליו אוקיי אז אנחנו עומדים לעשות ליצור קולקשנים שלנו בדומה לליסט ולעבור עליו אז בוא נגיד ניצור אנחנו רוצים ליצור לדוגמה
קולקשן שמכיל צעצועים אוקיי בוא נגיד התוכנה שלנו היא תוכנה שיש לה מלאי של צעצועים, אנחנו רוצים לעבור עליהם. אז בוא ניצור לנו איזה קלאס, נעשה add, נקרא לקלאס הזה toy, קלאס הזה ייצג צעצוע מסוים, בוא נגיד תן לו שם, וגם ניתן לו,
בוא נגיד שיש לו מחיר גם, יפה. עכשיו אני רוצה ליצור, יש לנו עכשיו פה קלאס אחד שמייצג toy, עכשיו אני רוצה ליצור את הקלאס בנומל לליסט, אני רוצה ליצור את הקלאס שיכיל אוסף של צעצועים אז נעשה עוד פעם add קלאס ועכשיו נקרא לזה toys נקרא לזה toys list יש לנו פה קלאס שעכשיו הוא בסופו של דבר יכיל
יכיל איברים שכל איבר יהיה מסוג של toy אז בתוך הקלאס הזה אנחנו עומדים לכתוב למעשה את האיברים את האוסף של הצעצועים שיהיו לנו שהקלאס הזה שהמערך שהאוסף הזה יכיל אוקיי אז זה מיסוג של toy יש לנו פה מערך של צעצועים שנקרא לזה selected toys או פשוט נקרא לזה אולי toys יופי עכשיו יש לקלאס הזה קונסטרקטור toys list והקונסטרקטור הזה מקבל אליו כשיוצרים את האובייקט הזה שהוא למעשה מייצג אוסף של הצעצועים אנחנו רוצים
להעביר לו את הצעצועים אוקיי יש לנו פה למעשה אובייקט נציג אוסף של צעצועים אנחנו רוצים להעביר לו את הרשימה של הצעצועים שיהיו בתוכו אז אנחנו מעבירים לו מערך של צעצועים ואנחנו מכניסים מכניסים לתוך האיבר הזה שיש לנו פה ששייך לקלאס הזה טויס את המשתנה הזה שימו לב שהמשתנה הזה הוא לא הוא
לא אותו דבר כמו המשתנה הזה למרות שיש להם את אותו שם השם של המשתנה הזה מתחיל בתיק גדולה והשם של המשתנה הזה מתחיל בתיק קטנה אז הם למעשה לא אותו משתנה אחרי שהעברנו לו את המשתנה הזה זה השלב זה השלב שלך שסיימנו אותו עכשיו מה שקורה זה שכדי שאנחנו נשתמש בקלאס הזה ויהיה אפשר לעבור עליו יהיה אפשר לעבור על האיברים שבו אוקיי על הטויז שבו באמצעות לולאה של for
each אנחנו צריכים לממש להשתמש באינטרפייס מסוים באינטרפייס שאנחנו צריכים להשתמש בו נקרא I enumerable המילה enumerate אם נשים בצד את הable הזה המילה enumerate רק אם המילה ה-numerate היא מציינת משהו שאפשר למנות אותו, לספור אותו, אוקיי?
וה-seer-at-able זה למעשה משהו שניתן לספירה. זאת אומרת ה-toys class, בזה שאני יכול לממש את האינטרפייס הזה, אני אומר שניתן לעבור עליו.
כלומר, ניתן להשתמש בו באמצעות עולה for each. אז אני אלחט על הצ'ופצ'יק הקטן שיש פה, ומה שיש לי פה עכשיו, אני יכול עכשיו לקבל באופן אוטומטי, תהיה לי השלמה אוטומטית של כל הפונקציות או הפרופרטי שנמצאים באותו אינטרפייס שאני חייב להשתמש בהם.
אז אני לוחץ על זה, ומה שהופיע לי פה זה משתנה שנקרא get enumerator. משתנה שנקרא get enumerator הוא משתנה שנמצא בתוך האינטרפייס הזה ואני צריך להשתמש בו.
אם אני רוצה לגרום לך עכשיו שהקלאס הזה שנקרא toys יהיה אפשר לעבור עליו. אוקיי, זה כמו שקוראים גט אינומרטור, מחזיר לנו איינומרטור.
עכשיו אם אנחנו נסתכל רגע על המילה אינומרבל ואינומרטור, אינומרבל, בוודאי שאני אחר כך אומר שהטויז ליסט מממש את איינומרבל, אני למעשה אומר שאפשר לעבור עליו באמצעות for each.
והאינומרטור, אני אוהב להתייחס לזה בתור כמו אדם שעובר עכשיו על הרשימה שיש לי, ומפעיל לי את הפריט הבא ברשימה.
אז בדרך כלל כשאני אומר גט אינומרטור, אני אומר תביא לי את הישות שמביאה לי את האיבר הבא ברשימה אז יש לי פה גטי נומרטור אני צריך ליצור פה עוד משתנה אחד שנקרא פרייבט IE נומרטור ונקרא לו people.toys enum וכשאנחנו עכשיו נמצאים בתוך הקונסטרקטור ויצרנו עכשיו משתנה מסוג של toys list אני רוצה גם לתת עכשיו ערך ל-toys enum
עכשיו למשתנה הזה מסוג של איי נומרטור, איי נומרטור אינטרפייס כמו שאתם יודעים ואי אפשר ליצור אי אפשר ליצור עכשיו אובייקט מסוג של אינטרפייס, אינטרפייס משתמשים באינטרפייס על ידי קלאס כדי לממש אותו אז אני הולך ליצור פה עכשיו עוד קלאס נקרא נקרא לו