
Int(str) ממירה מחרוזת למספר. ההמרה לא תמיד מצליחה, ולכן התוצאה היא אופציונל.Double(t) ממירה מספר שלם למספר עשרוני."\(h)".הטקסט המלא של הדקות הראשונות בהרצאה «המרה בין סוגי משתנים - Type Conversion» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים אחרי שלמדנו על משתנים ועל המשתנים המיוחדים האופציונל של סופת סוויף עכשיו אנחנו יכולים סוף סוף לעבור לדבר על המרה בין סוגי משתנים למשל ניתן לכם דוגמא לפעמים אתם רוצים להמיר סטרינג למספר לפעמים אנחנו רוצים להמיר דאבל להיות מספר שלם ועוד דוגמאות כאלה ואחרות בסדר מהסגנון הזה המרה בין סוגי משתנים
אז בואו נדבר איך אנחנו ממירים בין המשתנים דאבל למספר וכן הלאה. דבר ראשון שהייתי רוצה לציין שההמרה מתבצעת בצורה של בנאים. מה זאת אומרת?
למשל יש לי איזשהו סטרינג str שמכיל בתוכו מספר, נכון? עכשיו הדבר הזה הוא סטרינג ואני לא יכול לעשות איתו פעולות חשבון, אני לא יכול לומר str כפול ושתיים מכיוון שזה פשוט לא ביטוי בר משמעות, נכון? אי אפשר לכפול סטרינג באינטג'ר.
מה שהיינו אולי רוצים לעשות זה להמיר את הדבר הזה להיות מספר. אז איך עושים את זה? בואו נבדוק. כדי להמיר את הסטרינג שלי להיות מספר, אז בואו נאמר אני אקרא לזה num, אני ארצה פשוט להמיר את הסטרינג למספר בצורה הבאה.
אני משתמש פה בבנאי של אקסטרקט אינד ומעביר לבנאי הזה את הסטרינג str בצורה הזאת. מאוד מאוד פשוט. עכשיו השאלה היחידה היא מה אני קיבלתי כאן, בסדר?
בואו ננסה לבדוק מה הטייפ של נם, מה דעתכם תהיה התשובה דרך אגב, בואו נחשוב, האם זה מספר רגיל או שזה אופציונל, מה דעתכם?
אופציונל הוא מספר רגיל, בואו נבדוק, כן. אז כפי שציפיתם בוודאי ההמרה לא בהכרח תצליח, לא בהכרח תצלח, יכול להיות שיש פה סטרינג אבל יכול להיות שיש כאן גם מספר ולכן אנחנו מקבלים פה אופציונל, אוקיי?
אם יש פה 10 אז ההמרה תצליח, אם יש פה צ'אר אחר נגיד p אז כבר זה לא תקין נכון זה לא מספר תקין ואז הדבר הזה יניל. אז סוויפט בעצם משתמשת כאן באופציונלס כדי לעזור לי להימנע מבעיות עם המרות.
בשפות אחרות התוכנית פשוט קורסת. בסוויפט קיבלתי אופציונל ומה עליי לעשות כרגע? עליי לבדוק אם יש לי מספר אז אני יכול להשתמש בו בבטחה ואפילו לכפול אותו בשתיים.
בוא נבדוק אם כרגע זה כבר יעבוד לי בוא נראה. מצוין עכשיו אם אני אריץ את התוכנית שלי אז הפעם אנחנו מצפים לראות איזה פלט של 20 נכון בוא נבדוק בוא נראה את הפלט 20 יפה מאוד אבל מה היה קורה אם יש לנו כאן איזשהו מספר לא תקין במצב כזה אני כמובן לא אקבל פלט ואז אני יכול פה להשתמש ב-S
ולהגיד ש-STR is not enough לא נכון בוא נבדוק אם אני אריץ את זה עם ה-10 אז אני אקבל את ה-20 כמובן אחרת אני אקבל sdr is not a number ולכן ההמרה פשוט כשלה ההמרה פה נותנת לי מספר אופציונלי כאן עשינו את הטייפ קולבר שם בעצם מה שעשינו זה להמיר את הסטרינג שלי לינק בדיוק על ידי הבנאי פה של הסטראקט
אינטג'ר עכשיו בואו ננסה לראות עוד דוגמאות להמרה בין סוגי משתנים ואחר כך אני גם אתן לכם תרגיל הדוגמה שלנו אומרת רוצים לפעמים להמיר מספר שלם למספר עשרוני או להפך בוא נאמר קיבלנו 15 אבל אנחנו רוצים שהוא יהיה דאבל קיבלנו בוא נאמר t שווה 15 ואני החלטתי שזה צריך להיות 15 נקודה נקודה עכשיו כרגע הדבר הזה כבר נקבע להיות int מה קורה אם באיזשהו שלב אנחנו
רוצים להמיר את זה לדאבל כדי להמיר את זה לדאבל אנחנו פשוט נמיר את זה לדאבל בדיוק באותה צורה כמו קודם אני אהפוך את t להיות d בדיוק ככה שוב פעם type conversion בעזרת אפשר כמובן להדפיס את הדבר הזה. עכשיו הייתי רוצה גם להראות דבר נוסף שבדוגמה הזאת אנחנו פשוט נצטרך, יש הרבה דוגמאות שבהן נצטרך
את הטייפ קונברשן הזה וזה מאוד מאוד חשוב להכיר את הסינטקס וגם להכיר את הרצונות של סוויפט בנוגע לדברים מסוימים. בוא נאמר יש לי שלושה מספרים let num1 שווה 2 let num2 שווה ל3 ולט נם ארבע בוא נאמר שווה לחמש נם ארבע. עכשיו אנחנו רוצים לחשב את הממוצע איך נחשב את הממוצע של המספרים זאת שאלה מאוד מאוד פשוטה נכון הממוצע של המספרים במקרה שלנו
אם אנחנו ניזכר בבית הספר זה שלושת המספרים הסכום שלהם לחלק לשלוש לחלק למספר האיברים בוא נראה איך זה יתבצע אז let sum הוא יהיה שווה ל-num1 ועוד num2 ועוד num4 כל הסיפור הזה, נכון?
זה הסכום של המספרים. עכשיו, איך נחשב את הממוצע? אמרנו avg צריך להיות בערך הסכום לחלק ל-3. עכשיו, למה אני אומר בערך? בוא נדפיס רגע את ה-avg ונראה.
אני אומר בערך בגלל שהוא אומר לי שהממוצע הוא 3. עכשיו, ברור לנו שהממוצע לא 3, הממוצע היה שלוש אם היה פה הספרה ארבע הממוצע פה הוא שלוש ומשהו אוקיי עכשיו איך אני מקבל את המספר אני צריך להמיר את סם להיות דאבל נכון או את שלוש להיות דאבל גם כן נראה כביכול אפשרי אז אני אומר הסכום לחלק לדאבל רואים וסוויפט לא מתירה לי לעשות דבר כזה לא מתירה
לי לחלק אינטג'ר בדאבל אז מה אנחנו צריכים לעשות תראו את הערת שגיאה דרך אגב אני רוצה שנקרא אותה ביחד כתוב לי כאן האופרטור הבינארי החילוק לא יכול להיות מופעל על שני אופרנדים שאחד הוא אינטג'ר והשני הוא דאבל כלומר אי אפשר להפעיל את הסימן הזה של החילוק על אינטג'ר ודאבל הוא רוצה שיהיה לי פה דאבל משני הצדדים
או אינטג'ר משני הצדדים ולכן אני אשתמש פה בטייפ קונברשן כמו שדיברנו קודם המרתי את הסכום להיות דאבל ועכשיו אני מצפה לקבל סוף סוף את הממוצע המדויק אני רוצה לציין עוד איזושהי עובדה קטנה כדי שלא תחבו איזשהו תסכול בתרגול.
בואו נראה מה קורה אם אני אמחק מכאן את הרווח. אתם רואים שהקומפיילר של הסוויפט מאוד רגיש לצורת הכתיבה. אתם תשימו לב שבין אופרטור לבין אופרנט, דרך אגב, הפלוס הוא נחשב אופרטור בינארי בגלל שהוא פועל על שתי אופרנטים, על שתי דברים,
אחד משמאל ואחד מימין. אז אם אני עכשיו אמחק את הרווח, אתם רואים אז יש פה איזשהו אי הבנה האם אני רוצה לעשות נר אחד פלוס או מה אני רוצה לעשות כאן.
ברגע שאני אמחק את הרווח משני הצדדים דרך אגב אז הדוגמה הזאת תתקמפל בסדר וסוויפ תבין שאני כנראה רוצה לחבר את שני המספרים אבל אנחנו תמיד רוצים לעבוד מסודר ולהשלים את הרווחים בין האופרטורים לאופרנטים.
לפני שנמשיך לתרגול אני רוצה להדגיש שכבר עשינו איזושהי המרת משתנים בעבר. למשל אני רוצה לשאול אתכם שאלה איך אתם ממירים מספר שלם למשל int בסדר נגיד let h of type int איך אתם ממירים לי את הדבר הזה להיות סטרינג ההמרה פה יכולה בהחלט להתבצע על ידי זוכרים?
סטרינג אינטרפוליישן בוא נראה let str h שווה אנחנו נעשה פה סטרינג חדש למעשה אם נשתמש בסטרינג אינטרפוליישן ופשוט