
int נכנס למשתנה long, כי הטיפוס הגדול מכיל את הקטן.double למשתנה int נדחית, כי double יכול להחזיק גם ערך עשרוני וגם מספר גדול בהרבה.boolean. במקרה כזה אין קאסטינג ואין פונקציה מוכנה.הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על Casting» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לנושא חדש שנקרא קאסטינג. הנושא הזה הוא מאוד חשוב ומאוד בסיסי ואם אנחנו לא באמת מבינים מה זה ואיך לעבוד איתו אז יכול להיות לנו כל מיני שגיאות בקוד בין אם זה שגיאות קומפילציה או שגיאות ריצה שאנחנו לא נבין מה הם ולמה הם.
אז קודם כל מה זה בעצם קאסטינג? אז קאסטינג זה פשוט מאוד המילה המרה להמיר משהו וזה הפעולה של המרה זמנית בין משתנה מטיפוס נתונים אחד למשתנה מטיפוס נתונים אחר.
עכשיו, למה לנו לעשות דבר כזה? אז סיבה אחת לדוגמה יכול להיות לנו שיש לנו איזשהו משתנה מסוג אחד ואנחנו רוצים להכניס אותו למשתנה מסוג אחר. אז אם אנחנו רוצים לבצע את זה, האם בכלל המערכת מסכימה לעשות דבר כזה?
ואם לא, אולי אנחנו יכולים לאלץ אותה לבצע דבר כזה. אז קאסטינג זה הפעולה של ההמרה הזמנית רק למשך ההשמה לדוגמה של אותו ערך מסוג א' לערך מהסוג השני בשביל להצליח להכניס אותו לתוך המשתנה.
זאתי דוגמה אחת שיכולה להיות. אז בואו נראה. הנה דוגמה, יש לנו כאן איזה שהוא משתנה מסוג אינטג'ר שנקרא Moon Distance, המרחק לירח.
יש לנו משתנה נוסף מסוג long שנקרא distances in space, הוא כנראה מחזיק מרחקים בחלל. בגלל שמרחקים בחלל יכולים להיות מאוד מאוד גדולים, הרבה יותר מ-integer, אז יש לנו long.
ל-moon distance הכנסנו את המרחק מכדור הארץ עד לירח, שזה 384,400 קילומטר, במקרה הזה זה במטרים. אוקיי, ועכשיו אנחנו רוצים לקחת את ה-moon distance ולהכניס אותו למשתנה distances in space אבל שניהם בעלי טיפוסים אחרים.
עכשיו לוגית, ברור שזה הגיוני שנרצה לעשות דבר כזה. האם הדבר הזה ניתן לביצוע? אנחנו תכף נראה. אוקיי, דוגמה נוספת.
יש לנו סלארי מסוג דאבל. יש לנו עוד איזשהו אינטג'ר שנקרא upper rounded salary, כאילו אנחנו רוצים לקחת את הסלארי ולעגל אותה כלפי מעלה. אנחנו רוצים להכניס בסלרי לסלרי איזשהו ערך מהיוזר אוקיי אז יש לנו console.nextdouble יוזר הביא לנו את הסלרי שלו ואנחנו רוצים לעגל אותה כלפי מעלה לצורך חישובים לצורך הצגות לצורך חישובי טאקס לא משנה למה ואז אנחנו רוצים להכניס את הסלרי ל upper
rounded salary האם הדבר הזה ניתן לביצוע שני הדברים האלה שני המשתנים הם בעלי טיפוסים שונים לגמרי אוקיי יש כמה סוגי קאסטינגים דבר ראשון implicit casting המרה מרומזת מתבצעת אוטומטית על ידי הקומפיילר אנחנו לא צריכים להגיד לקומפיילר לעשות את זה הקומפיילר יודע אוטומטית ומסכים לבצע את זה הקומפיילר יסכים לעשות את זה רק אם הוא
רואה שאין שום סכנה בעיבוד מידע בין הכנסת ערך מסוג אחד להכנסת משתנה מסוג אחר לדוגמה אם אנחנו אנחנו רוצים לבצע השמה של ערך שנמצא במשתנה שהוא קטן יותר בזיכרון לתוך משתנה שהוא גדול יותר בזיכרון ומסוגל להכיל אותו.
אז אין פה בעיה, המשתנה הגדול מסוגל להכיל את המשתנה הקטן. לא תהיה שום בעיה, קומפיילר יאשר את זה. אז כאן אנחנו רואים את הדוגמה הזאת. יש לנו את ה-moon distance שהוא מסוג integer ואנחנו רוצים להכניס אותו לתוך distances in space שהוא מסוג long.
לונג הרבה יותר גדול מסוג אינטג'ר, אינטג'ר זה ארבעה בתים, לונג זה שמונה בתים, אז אין שום בעיה לקחת ערך שהוא אינטג'ר ולשמור אותו בתוך איזה שהוא משתנה מסוג לונג, ולכן הקומפיילר מאשר לבצע את זה בלי שאמרנו לו שום דבר, והוא עשה אוטומטית את הקאסטינג, את ההמרה הזאת.
לכן זה נקרא implicit casting, הוא עשה את זה בצורה מרומזת, explicit casting, המרה מפורשת. המרה מפורשת זה מצב שיכול להיות שאנחנו הולכים לאבד מידע.
אם יש סכנה כזאת שאנחנו רוצים לבצע את ההמרה אבל אנחנו הולכים לאבד איזשהו מידע או שיכול להיות שאנחנו נאבד מידע כתוצאה מההמרה הזאת, הקומפיילר אומר רגע רגע אני לא מסכים לבצע את ההמרה ואני גם לא אעשה לכם אימפליסיט קאסטינג.
הנה דוגמה יש לנו את הסלארי, יש לנו את ה-Upper Rounded Salary, קיבלנו את ה-Salary מה-User ואנחנו רוצים לקחת את ה-Salary ולהכניס את זה ל-Upper Rounded Salary.
מה הבעיה? אז קודם כל דאבל יכול להחזיק בכלל ערך הרבה יותר גבוה מאינטג'ר, אז אנחנו יכולים לאבד מידע. מה גם שדאבל יכול להחזיק ערך עשרוני, אינטג'ר לא יכול להחזיק ערך עשרוני, זה גם נחשב שאנחנו איבדנו את המידע.
לכן הקומפיילר קודם כל לא מאשר לבצע את הדבר הזה אבל במקרים מסוימים בעיקר במצבים של ערכים נומריים כמו במצב הזה המתכנת יכול לעשות עוד איזה משהו בשביל לומר לקומפיילר תקשיב אני מאשר לעשות את זה ובוא תעשה לי תעשה לי את זה בכל מקרה זאתי המרה מפורשת כי אנחנו בצורה