PracticU

רב-צורתיות, בדיקת סוג משתנה בזמן ריצה והמרת סוג המשתנה

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode › רב-צורתיות, בדיקת סוג משתנה בזמן ריצה והמרת סוג המשתנה
מילון מושגים:
ירושה - מנגנון בתכנות מונחה עצמים שבו מחלקה יורשת תכונות ופעולות ממחלקת אב, ויכולה להרחיב אותן.
פולימורפיזם - עיקרון בתכנות מונחה עצמים שבו אובייקטים ממחלקות שונות מגיבים לאותה פעולה כל אחד בדרכו.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
בוליאני - סוג נתונים שיכול לקבל אחד משני ערכים בלבד: אמת (true) או שקר (false).

רב-צורתיות, בדיקת סוג משתנה בזמן ריצה והמרת סוג המשתנה
בשיעור הזה נלמד על ירושה, פולימורפיזם והמרה בין סוגי משתנים בשפת Swift. כל הדוגמאות נכתבות בפלייגראונד, שמציג את תוצאת ההרצה מיד.
ירושה
1. מחלקת בסיס: המחלקה Media מייצגת את הבסיס, ובה משתנה name מסוג String ובנאי שמאתחל אותו.
2. מחלקות יורשות: המחלקות Movie ו-Song יורשות מ-Media באמצעות נקודתיים בהגדרה. ל-Movie נוסף משתנה director, ול-Song נוסף משתנה artist.
3. סדר האתחול: ב-Swift קודם מאתחלים את התכונות של המחלקה היורשת, ורק אחר כך קוראים ל-super.init עם הפרמטרים הנדרשים. זה הפוך מ-Java, שבה קוראים ל-super קודם.
פולימורפיזם
- מערך מסוג Media יכול להכיל גם Movie וגם Song. הטייפ שמסיק Swift למערך הוא Media, והוא מאפשר לעבור על כל הפריטים כמדיה אחת.
- הטייפ Any מאפשר לאחסן כל ערך, כולל מחלקות, מבנים ומספרים. המרצה ממליץ לא לערבב מספרים עם מדיה, כי זה אינו הגיוני במבנה כזה.
בדיקת טייפ והמרה
1. בדיקה עם is: מחזירה ערך בוליאני, והיא מתאימה כדי לדעת אם פריט הוא Song לפני שמבצעים עליו פעולה.
2. המרה כפויה עם as!: משנה את הטייפ בכוח. אם הפריט אינו מהטייפ המבוקש, התוכנית קורסת. המרצה מדגים את הקריסה, והודעת השגיאה מציינת שאי אפשר להמיר Movie ל-Song.
3. המרה בטוחה עם as?: מחזירה ערך אופציונלי, ולכן אפשר לבדוק אותו עם if let בלי לקרוס.
הכלל שנלמד: לפני המרה כפויה בודקים את הטייפ, או משתמשים ב-as? כדי להימנע מקריסה.
הסיכום: ירושה מאפשרת לחלוק מאפיינים משותפים, פולימורפיזם מאפשר לעבוד עם טייפים שונים דרך מערך אחד, ובדיקה והמרה בטוחות מונעות קריסה.

פרקי ההרצאה: רב-צורתיות, בדיקת סוג משתנה בזמן ריצה והמרת סוג המשתנה

  1. 00:00

    מבוא: ירושה, פולימורפיזם והמרת טיפוסים

  2. 01:14

    יצירת מחלקת הבסיס Media

  3. 03:49

    ירושה: הגדרת המחלקה Movie

  4. 05:29

    מחלקת Song שיורשת מ-Media

  5. 06:34

    פולימורפיזם: מערך של סוגי מדיה

  6. 08:12

    הטיפוס המוסק של המערך

  7. 08:47

    Any ו-AnyObject: מה ההבדל

  8. 11:05

    אופרטורי בדיקת טיפוס והמרה

תמלול ההרצאה: רב-צורתיות, בדיקת סוג משתנה בזמן ריצה והמרת סוג המשתנה

הטקסט המלא של הדקות הראשונות בהרצאה «רב-צורתיות, בדיקת סוג משתנה בזמן ריצה והמרת סוג המשתנה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום וברוכים הבאים אנחנו רוצים לדבר היום על ירושה, פולימורפיזם והמרה בין סוגי משתנים בסוויפט. אז בואו נתחיל כדי להתחיל אנחנו רוצים לייצר לעצמנו לא פרויקט הפעם כי אם פלייגראונד אז אנחנו הולכים לאקסקוד ומייצרים פייל ניו פלייגראונד הסוג של פלייגראונד הוא פלאן פלייגראונד ואנחנו נלחץ כאן על נקס אני אקרא לפלייגראונד

  2. 00:26

    שלי typecasting.swift ונשמור אותו בספרייה שבה אני שומר את כל הפרויקטים. אוקיי אז הנה הפלייגראונד שלי כמובן אני ארצה להריץ את הפלייגראונד כדי לראות שהוא רץ ואני אגדיל את זה להיות על מסך גדול אוקיי אז הנה פלייגראונד פלייגראונד פשוט מאפשר לנו לראות את התוצאה של ההרצה די מהר

  3. 00:52

    גם פה בצד ימין וגם בחלק התחתון אם תהיינה לי הדפסות למשל אם אני אדפיס פה את הסטרינג הזה שמוגדר לנו כבר אוטומטית בפלייגראונד אז הוא יודפס פה למטה אבל גם בצד ימין אז איך שנוח לכם יפה אנחנו רוצים בשביל להתחיל לייצר איזשהו קלאס שנקרא קלאס של מדיה סתם קלאס רגיל לגמרי בשביל הדוגמה הפשוט והקלאס הזה מייצג מחלקת בסיס שממנה ירשו

  4. 01:23

    המחלקות מובי וסונג בשביל לעשות ירושה אני מניח דרך אגב שאתם מכירים ירושה ואני רק מראה לכם את הסינטקס בסוויפט אני לא נכנס פה לפסיכולוגיה של ירושה מתי כדאי וכן הלאה כי אני שוב פעם מתוך נקודת הנחה שכבר עשיתם את זה בקורסים נוספים אז מה שאני עושה, אני

  5. 01:41

    מדגים מבחינה טכנית איך לבצע. אז אנחנו מייצרים לעצמנו name מסוג String, וכמובן באותו רגע, ברגע שיש לי קלאס, אין לנו בקלאס יצירה אוטומטית של בנאים, באותו רגע התחייבתי בעצם לייצר לי פה בנאי.

  6. 01:57

    בואו נייצר את הבנאי. אז יש לי name מסוג String, ואותו אני צריך כמובן לשמור לעצמי, התפקיד הלוב של הבנה היא להתחיל את התכונות אז עכשיו הקומפיילר אמור להיות מרוצה ולרדת מההערה הזאת כל פעם כשאתם נותנים לעצמכם מלא הסברים או נותנים למישהו אחר מלא הסברים זה סימן שאנחנו פשוט צריכים להוסיף הערות בסדר פשוט כדי לתעד את הקוד שלנו

  7. 02:21

    שיהיה קריט טוב ויפה אני אתן פה הערה למשל המרה בין סוגי משתנים שזה מה שאנחנו רוצים ללמוד היום אני דרך אגב לא ממליץ לתעד בעברית הסיבה שאני מתעד בעברית זה בגלל שאנחנו מעבירים פה הרצאה ועבור הרצאה זה נוח לכם שאני אתעד את זה בעברית.

  8. 02:44

    בסדר? אז המחלקה מדיה, כפי שאמרתי, הינה מחלקת אב, ממנה יורשים המחלקות האחרות movie והמחלקה צום. זה הכל, זה מה שרציתי לומר פה.

  9. 03:08

    כהערת אגב מעניינת ונחמדה, אני משתמש פה בהערות מיוחדות לפלייגראונד שאחר כך יכולות להיראות כמו ספר. למשל אם אנחנו נבקש ככה באדיטור להציג לנו את הרנדרד מארקר, אז אתם רואים ההערות שלי ככה לא היו במקרה אלא נחמדות יותר וככה בסוף של השיעור יהיה לנו סיכום נחמד של השיעור בדומה למעין מצגת שכזאת אז אני אצמיד פה את הטקסט לרבי שזה ייראה

  10. 03:40

    יפה אז יש לנו קלאס מדיה והקלאס הזה הוא מחלקת בסיס בואו נירש ממדיה איך יורשים ממדיה אנחנו נייצר קלאס מובי כמובן וכדי לרשת כמו שאתם בטח ניחשתם הנקודותיים פה עושות את העבודה ירשתי ממדיה זה הכל אקסטנטס אוקיי בשפות אחרות עכשיו אנחנו נרצה שבמובי יהיה לנו תכונות נוספות ככה זה בהרחבה רוצים באקסטנטשנים באקסטנטס רוצים להוסיף משהו תמיד

  11. 04:09

    אז בואו נייצר לעצמנו את הדירקטור של הסרט שהוא סטרינג וכבר באותו רגע איבדתי את הבנאי שקיבלתי בחינם ואני צריך לייצר לעצמי בנאי חדש מה הדבר הזה רוצה מאיתנו הוא רוצה שאני פשוט אשים פה סטרינג רג ואז אני לא אהיה חייב לעשות בנאי זה לא חכם במיוחד אני באמת רוצה בנאי בכל מיני

  12. 04:30

    מחלקות שאני מייצר אז בואו נבקש גם את ה-Name מסוג String וגם את ה-Director מסוג String אוקיי אז נשמור אותם כמובן עכשיו נשים לב מה שאני עושה פה מבחינת הסדר זה שאני קודם שומר לעצמי את ה-Self Director ורק אחר כך אני פונה לעינית של האבא שזה הפוך ב-Java למשל בסדר אז ב-Java אנחנו קודם קוראים לסופר

  13. 05:00

    ובסוויפט אנחנו קודם שומרים את התכונות ואחר כך מעבירים לסופר. מה נעביר לסופר? את ה-name. אז הנה לכם חברים וחברות הביצוע של ירושה והעברה של פרמטרים לסופר או למחלקת העבודה.

  14. 05:26

    אוקיי אז הנה יש לנו קלאסט ראשון עכשיו בואו נעשה קלאסט שני אני פשוט אעתיק את הקלאסט הזה של מובי ואנחנו נעשה קלאסט סונג לסונג אנחנו לא נרצה דירקטור אלא אנחנו נרצה ארטיסט בסדר וכל מקום שכתוב פה דירקטור אני אתקן לארטיסט ובזה יש לנו עוד ירושה הנה כל מה שעשינו עד עכשיו אין לי פה

  15. 05:52

    הרבה הדפסות כי בסך הכל הגדרנו פה קלאסים אז נפטרנו פה מכל ההדפסות ואני מציג לפניכם את המסך המלא הגדרה של מחלקה רגילה הגדרה של מחלקה יורשת ומחלקה יורשת נוספת בואו נעבור להסתכל על פולימורפיזם של ירושה בסדר בואו אני אעתיק מפה את הערת תיעוד הזאת הנחמדה ואני אשים הערת תיעוד חדשה ופה אנחנו במקום לרשום המרה בין סוגים משתנים

  16. 06:20

    אנחנו נרשום פולימורפיזם בירושה במקרה של ירושה בסדר עכשיו אני ארצה להגדיר לעצמי כמובן מערך שמכיל את כל סוגי המדיה אוקיי בואו נראה איך זה הולך אז אנחנו נגדיר לעצמנו איזשהו let library ואנחנו כמו שאמרנו זה יהיה מערך והמערך הזה יכיל את כל סוגי המדיה, הוא

  17. 06:59

    יכול להכיל גם מובי וגם סונג, בסדר? אז בוא נעשה את זה. הכנסתי פה מובי אחד, אנחנו נלך פה על כל מיני סרטים שאנחנו הכנו מראש, The One and Only, איזשהו סרט, והבימאי הוא לא אחר מאשר שסני פוקס, בסדר?

  18. 07:31

    נגיד, הנה סרט אחד, עכשיו, מה שאני רוצה גם לעשות, ואני רוצה להוסיף לכאן גם איזשהו סונג אז אני אעשה פסיק ובוא נגיד אנחנו רוצים להוסיף בייבי can I hold you by Tracy Chapman יפה עכשיו שמתם לב שבאותו מערך אני בעצם מכיל סוגי מדיה שונים זה ביטוי לפולימורפיזם ושתי הדברים האלה הם בעצם יורשים נכון אז מה הטייפ של ליבררי בוא נראה

  19. 08:23

    הטייפ של ליבררי הוא Inferred Libert Media שזה לגמרי מערך של מדיה שזה לגמרי מגניב נכון זה לגמרי ככה סונג ומדיה וגם מובי ומדיה בסוויפט לא פספסה את זה והגדירה את זה להיות מערך של מדיה.

  20. 08:38

    האמת היא שבסוויפט יש עוד טייפים, למשל הייתי יכול להגדיר את זה במקום להיות מערך של מדיה כמו שאם היינו רוצה להגדיר את הטייפ בצורה מפורשת אז הייתי מגדיר אותו ככה נכון?

  21. 08:49

    מדיה הרי. אבל בסוויפט יש טייפים נוספים שכדאי להתייחס אליהם הפעם. אני יכול להגיד שזה מערך של any, any זה כל דבר זה אומר כל אובייקט וגם לא אובייקט.

  22. 09:04

    מה זה לא אובייקט? זה יכול להיות אינם וזה יכול להיות סטראקט זה לא רק קלאסי בסדר אם אני רוצה שזה יהיה כל אובייקט אז זאת אומרת רק מופע של מחלקות כלשהן וזה בסדר כי באמת יש לי פה רק אובייקטים אז any object זה מופעים של מחלקות any זה כל דבר זה גם מחלקות וגם נגיד שימו לב ב-any object אני לא יכול להוסיף מספר למה כי מספרים

  23. 09:33

    מוגדרים כסטראקצ'רס בסוויפט בסדר אי אפשר להכניס אינט ל-any object שימו לב מספר בסוויפט רק שככה נהיה סגורים וגם סטרינגים וכל המשתנים שאתם מכירים מהשפה הם מוגדרים כסטראקטים כל משתנה שאתם לא יודעים אתם מוזמנים פשוט לכתוב את השם של המשתנה ולעשות קומנד וקליק כדי לקפוץ להגדרות כאן כדי לבדוק בסדר אז הדבר הזה אינטג'ר טענה שלי int is a struct

  24. 10:06

    הוא לא יכול להיכנס למערך של אובייקטים של any object של כל אובייקט כן יכול להיכנס למערך של כל דבר. מה זה כל דבר? מערך של Any.

  25. 10:19

    בסדר? אנחנו אבל לא נרצה אף פעם לשים מספרים ביחד עם מדיה, זה קצת לא חכם. מה שכן חכם זה להשתמש בחוכמה, כמו שבני אדם אומרים בספריית מדיה יש כל מיני סוגים של מדיה, אז בוודאי שאנחנו נרצה שהדבר הזה יהיה Inferred להיות Media Type. אם אני לא אכתוב כלום זה גם מה

  26. 10:41

    שיקרה כי Swift מאוד מאוד חכמה. יפה מאוד, אז ראינו כבר שאנחנו יכולים לארגן לעצמנו מערכים שמכילים את כל סוגי המשתנים, וסוויפט מתייחסת למובי קל-מדיה וגם לסונג קל-מדיה, ואז אנחנו גם יכולים לכתוב פונקציות שמקבלות מדיה ולהעביר אליהם את הסרטים ואת השירים לרכישה או להשכרה.

  27. 11:05

    אוקיי, רק רציתי להראות לכם עוד דבר אחד היום בשיעור שזה בעצם אופרטורים עבור בדיקה של טייפ טייפ צ'קינג וגם עבור קאסטינג טייפ קאסטינג בסדר המרה

לקורס המלא: קורס פיתוח אפליקציות לאייפון

ההרצאה הקודמת: תרגול - משחק קלפים - תרגול מסכם בשפת swift

ההרצאה הבאה: מבוא לעיצוב ב-Auto Layout ואילוצים בסיסיים - Simple Constraints

הרצאות קשורות מקורסים אחרים

  • רב-צורתיות פולימורפיזם - Polymorphism
  • שם משתנה בפוסטמן
  • בדיקת גבולות
  • משתנה סטטי ב-NodeJS

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון