January 04, 2006

as האופרטור

כן, מדי פעם צצים עוד אופרטורים כמו פטריות רעל חינניות אחרי גשם בינארי. הפעם מדובר במילה as שלמרבה הפלא, הפעולה שלה מאוד אינטואיטיבית לשימוש. למה הכוונה?
מי שעסק ב-OOP (ואפילו אלו שלא) ודאי יודע מה היא casting. למי שלא יודע, אני ממליץ לקרא על הנושא פה. בקצרה, casting הוא למעשה הכוח הגדול מאחורי פולימורפיזם.
בעבר, כאשר רצינו לעשות cast, היינו משתמשים בצורה הבאה:


var myNum:String = "1";
trace(Number(myNum)instanceof String); // Displays "false"


זו הייתה הצורה עד as2. ב-as3 יש לנו עוד אופציה שהיא הרבה יותר אינטואיטיבית ומקלה על קריאות הקוד. השימוש באופרטור as, כאילו אומרים "התייחס לאובייקט זה כמו היה שייך ל-type אחר. הפעולה היא זהה:


var myNum:String = "1";
trace(myNum as Number instanceof String); // Displays "false"


ב- as3 השימוש ב-casting הרבה יותר נפוץ ולו רק מהסיבה שתיבות טקסט יכולות לקבל רק String כערך להצגה, מה שמביא את המפתח להמיר את ה-type של הערך והיה וזה לא String (כמו להציג תוצאה של פעולת חישוב בשדה output).
הופ הופ טרללה, תבלו.

2 comments:

Anonymous said...

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

FlashMattic said...

as אומר "תתיחס למשתנה הזה כאילו הוא שייך ל-type מסוים".
הוא לא משנה את הערך, כלומר אני יכול להגדיר משתנה מסוג Number ולהציב לו מחרוזת "1" אשר הוא אמור להתייחס אליה כ-Number. מה קורה הוא, שאני לא אקבל שגיאה ב-complie time אבל המשתנה שהגדרתי עדיין יופיע כ-NaN. מה שלא קורה כאשר אני עושה casting בדרך הישנה. as גם לא עושה תרגום לסיפרה ממחרוזות וכיו"ב.
אז לשאלתך - את/ה לא תקבל/י מספר, את/ה תקבל/י NaN.