
shapes הוא מערך מסוג Shape, ובלולאה של 20 איטרציות מכניסים אליו צורות.Metric.random(1, 2) ו-switch יוצרים עיגול או מלבן, כל אחד עם ערכים אקראיים בין 10 ל-20. טעות העתקה שגרמה להצגת צורה אחת בלבד תוקנה.for...of על המערך קורא ל-shape.display, ומתבצעת המתודה האמיתית של כל אובייקט. מופיעים עיגולים עם רדיוס ומלבנים עם רוחב וגובה.shape.radius לא ידוע, כי הפריט במערך הוא מסוג Shape.as Circle מאפשר לגשת לרדיוס, אך על מלבן התוצאה היא NaN, כי הערך undefined כפול 2 אינו מספר.if (shape instanceof Circle) מחשבת את הקוטר רק בעיגולים. בתוך ה-if אפשר לוותר על ה-downcast, כי העורך כבר יודע שהצורה היא Circle.instanceof.הטקסט המלא של הדקות הראשונות בהרצאה «פולימורפיזם ב-TypeScript» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו הולכים לראות באובג'קט אוריינטד זה פולימורפיזם, רב-צורתיות. דבר ראשון, אני אמחק את כל מה שעשיתי פה ב-Main.js ואנחנו רוצים לייצר לעצמנו איזשהו מערך אחד שמכיל את כל הצורות.
אז בפולימורפיזם אנחנו יודעים שאנחנו יכולים להגדיר איזשהו רפרנס בסיס ולהכניס לתוכו כתובת של אובייקט נגזרת. הקונספט הזה נקרא רב צורתיות כי אותו רפרנס יכול כל פעם להצביע על משהו אחר גם אם הרפרנס הוא איזה אחד הוא יחיד או גם אם הוא נמצא בתוך מערך זה נחשב פולימורפיזם אז בואו נייצר
מערך של צורות shapes הסוג שלו יהיה מסוג shape מערך בצורה כזאת ונכניס לתוכו, האמת שאני יכול כבר כאן להכניס לתוכו איזשהו מערך ריק ולהתחיל לרוץ בלולאה i שווה 1, i קטן שווה ל... בוא נניח 20, i פלוס פלוס.
בואו ניגש ונייצר לעצמנו צורות רנדומליות בעלות ערכים רנדומליים ונכניס אותם לאוסף הזה שיצרנו פה כרגע אז איך אנחנו מייצרים צורה רנדומלית בוא נניח יש לי כרגע רק מלבנים ועיגולים אז נעשה משהו פשוט אם f נקודה בוא נשתמש בפונקציה שבנינו מטריק נקודה רנדום 1 ו-2 שווה ל-1, שעדיף לעשות עם סוויץ' כבר נראה לי,
אז נוכל בהמשך נניח להוסיף עוד צורות. קייס יצא לנו 1, אז אנחנו רוצים לייצר לעצמנו איזשהו אובייקט שייפ, נקרא לזה סינגל שייפ, מסוג שייפ, ולגשת לסינגל שייפ שלנו ולהכניס ניו סרקל.
כאן נשתמש במטריק נקודה רנדום ונגיד לו תביא לי בבקשה איזשהו ערך בין 10 ל-20 עבור x בין 10 ל-20 עבור y ובין 10 ל-20 עבור הרדיוס וברק. מבצע את אותו הדבר עבור ריק טנגל.
טנגל צריך לקבל גם וויד וגם הייט, אז נגדיר פה את ההייט בצורה כזאת ואחרי שיש לנו את הסינגל שייפ אנחנו יכולים לגשת לשייפס נקודה פוש ולהכניס סינגל שייפ.
זה בעצם פולימורפיזם בואו רק נרוץ על הכל ונניח נציג את כל הפרטים. נעשה לולאט for each for const shape of shapes, shape.display זה אמור להציג לנו את הצורה על המסך.
בואו רגע נריץ, אני רואה שהוא קצת קשה לו, אז נעצור רגע, נעצור את הקומפיילר, נריץ את הקומפיילר, הינו מקומפל, ונריץ שוב פעם את האינדקס, נראה עכשיו איך הוא עובד, לא מה שרציתי שיקרה,
למה הוא מציג לי רק 1. אז הנה יש לנו פה קודם כל שגיאה של copy-paste, זה אמור להיות 2 ולא 1, כי הפונקציה יכולה להחזיר לי או 1 או 2 כמובן.
הנה יש לנו כרגע 20 צורות שמוצגות לנו על המסך, הצורה יכולה להיות circle, יכולה להיות rectangle בצורה כזאת, אם זה וויד והייט אני רואה שזה ריקטנגל, אם זה רדיוס אני רואה שזה סרקל, הכל עובד פרפקט.
בואו נראה מה קורה אם אני רוצה בנוסף לדיספליי להציג את הרדיוס, לא את הרדיוס, בואו נציג את הקוטר של העיגול, אבל רק אם יש לי קוטר, רק אם יש לי רדיוס כמובן.
אז אם אנחנו באים לכאן אחרי הדיספליי ואומרים אני רוצה להציג דוקומנט right, ה-d המטר, את הקוטר של העיגול והקוטר של העיגול