PracticU

ביצוע המרה - Cast

בלי כתוביותעם כתוביות
PracticU › קורס יסודות התכנות - שפת C# .NET - קורס תכנות למתחילים - דוט-נט / סי-שארפ - חומר לימוד של מדעי המחשב › ביצוע המרה - Cast
מילון מושגים:
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
קומפיילר - תוכנה שממירה קוד מקור שנכתב בשפת תכנות לקוד שהמחשב יכול להריץ, ומדווחת על שגיאות תחביר.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.

ביצוע המרה - Cast
המרה (Cast) היא שינוי הטיפוס של ערך כדי להכניס אותו למשתנה מטיפוס אחר. הסרטון מציג מתי ההמרה נעשית לבד, מתי צריך לבקש אותה במפורש, ומה קורה לערך בזמן ההמרה.
המרה מרומזת
כשהערך נכנס לטיפוס שמכיל אותו בוודאות, הקומפיילר ממיר לבד. לדוגמה, float שגודלו ארבעה בתים נכנס ל-double שגודלו שמונה בתים, ואין כאן סיכון לאבד מידע.
המרה מפורשת
כשהערך יכול לא להיכנס, הקומפיילר מסרב. לדוגמה, int x = 100; byte b = x; גורם לשגיאה, כי int תופס ארבעה בתים ו-byte בית אחד, ואם הערך יהיה גדול מ-255 הוא לא ייכנס. כדי לאשר את ההמרה כותבים את הטיפוס בסוגריים:
byte b = (byte)x;
כעת הקומפיילר מקבל את ההוראה, אבל האחריות על המידע עוברת למתכנת. אם x שווה 1000, b יקבל 232, כי הערך "מתגלגל" סביב 256. ההמרה לא משנה את הטיפוס של x עצמו.
מקרים נוספים
1. double לתוך float: נדרשת המרה מפורשת, כי double גדול יותר.
2. double לתוך decimal: נדרשת המרה מפורשת, כמו (decimal)12.34.
3. סיומות לקבועים: האות f או F הופכת קבוע למספר float, האות m או M למספר decimal, והאות l או L למספר long. הסיומות פועלות רק על קבועים, לא על משתנים.
4. מחרוזת למספר: לא ניתן להמיר בין string ל-int בעזרת קאסטינג. משתמשים בפונקציות המרה כמו int.Parse או Convert.ToInt32.
טיפוס של פעולה חשבונית
לכל פעולה חשבונית יש טיפוס: הטיפוס הגדול או המורכב יותר של האופרנדים. לכן 3 / 4 שבין שני משתני int נותן 0, כי החלוקה נעשית בין מספרים שלמים והשבר נחתך. ההמרה (double)a / b נותנת 0.75, כי אחד האופרנדים כבר double.
שימו לב
המרה מפורשת מתאימה לאישור מודע של הקומפיילר, ורק כשברור שאין סיכון לאבד מידע. כשאפשר לעשות המרה מרומזת, עדיף אותה.
השיעור הבא בקורס: קלט מהמשתמש - User Input

פרקי ההרצאה: ביצוע המרה - Cast

  1. 00:00

    מהי המרת טיפוסים Casting

  2. 00:41

    שגיאת המרה בין INT ל-BYTE

  3. 02:03

    גדלי הטיפוסים בזיכרון

  4. 04:06

    ביצוע Cast מפורש

  5. 05:06

    גלגול ואובדן מידע

  6. 08:04

    המרה בין DOUBLE ל-FLOAT

  7. 09:37

    המרה מטיפוס קטן לגדול

  8. 11:02

    המקרה המיוחד של DECIMAL

תמלול ההרצאה: ביצוע המרה - Cast

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

  1. 00:01

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

  2. 00:20

    קודם כל נפתח פרויקט חדש, נבחר קונסול אפליקיישן ונקרא לו קאסטינג. עכשיו בואו נגדיר איזשהו משתנה int x, נכניס לתוכו 100 ונגדיר עוד איזשהו משתנה בייט בי ונכניס לתוכו את x ואנחנו רוצים להציג את b וכעת אנחנו רואים שיש לנו שגיאה המערכת אומרת לנו שגיאה על x cannot implicitly convert type int to

  3. 01:01

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

  4. 01:23

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

  5. 01:46

    סוגים שונים. כנראה שמראש היינו צריכים אותם מסוגים שונים, ואז אנחנו רוצים לקחת את המשתנה מהסוג הראשון ולהכניס אותו לתוך המשתנה מהסוג השני.

  6. 01:56

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

  7. 02:17

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

  8. 02:44

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

  9. 03:15

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

  10. 03:30

    אז הסיבה לאי האישור הזה זה בגלל שיכול להיות אולי בעתיד אולי מתישהו יכול להיות שיהיה בו לדוגמה את המספר כבר 300, ו-300, ליתר דיוק נכניס את זה כאן, לא יכול להיכנס בתוך בית.

  11. 03:46

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

  12. 04:06

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

  13. 04:17

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

  14. 04:34

    אם אנחנו מבצעים עכשיו בדיקה, אנחנו רואים פה למטה שהמחשב כותב build succeeded. הרצתי בעצם ctrl+shift+b או במקרים מסוימים f6 אתם יכולים להריץ, והתוכנית בודקת האם יש לי שגיאות ויוצרת קובץ אקסקיושן.

  15. 04:54

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

  16. 05:15

    גלגול זה מצב בו המשתנה חרג מהגבולות, התגלגל ועבר להתחיל לספור מאפס בעצם. 255 כן יכול להיכנס לתוך בית ולכן אם אנחנו נבצע את זה אנחנו נראה שיש בתוך המשתנה b 255. אבל 256 כבר לא יכול ולכן המשתנה מאופס ומתחיל לספור מאפס.

  17. 05:42

    257 ייתן לנו ספירה של 1. 258 ייתן לנו 2. זה נקרא גלגול והוא מתחיל מאפס. חמש מאות ואחת עשרה נותן לנו מאתיים חמישים וחמש. חמש מאות ושתים עשרה שוב פעם נותן לנו אפס.

  18. 06:10

    אז אנחנו רואים שיכול להיות פה גלגולים כאלה, כי בתוך b יכול להיות בין אפס למאתיים חמישים וחמש.

  19. 06:18

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

  20. 06:31

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

  21. 06:54

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

  22. 07:12

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

  23. 07:36

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

  24. 08:07

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

  25. 08:40

    פלואוט, הגודל שלו זה 8 בתים. ליתר דיוק דאבל, הגודל שלו זה 8 בתים. פלואוט, הגודל שלו זה 4 בתים.

  26. 08:52

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

  27. 09:05

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

  28. 09:26

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

  29. 10:03

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

  30. 10:27

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

  31. 10:48

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

  32. 11:22

    אז איך זה יכול להיות שבמקרה הזה הוא לא מסוגל לקחת ערך שיכול להיכנס לתוך שמונה בתים להכניס אותו לתוך משתנה שיכול להחזיק 16 בתים.

  33. 11:33

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

  34. 11:47

    ומה שקרה כאן זה שדצימל בעצם מתאר את הערך

לקורס המלא: קורס C# למתחילים אונליין

ההרצאה הקודמת: פעולות מתמטיות - אופרטורים - חלק 3

ההרצאה הבאה: קלט מהמשתמש - User Input

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

  • cast sql
  • המרה של Web Element ל-Select
  • המרה של ETL לקובץ PCAP
  • המרה בין סוגי משתנים - Type Conversion

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

  • קורס פיתוח משחקים יוניטי - Unity - שפת #C