משתנה (תכנות)
מתוך ויקיפדיה, האנציקלופדיה החופשית
בתכנות, משתנה (variable) הוא חלק זיכרון בתוכנית המכיל נתון שיכול להשתנות בזמן הריצה, על פי הפקודות הניתנות לו, בניגוד לקבוע שמכיל ערך שנקבע בתחילת ההרצה ונשאר קבוע עד סופה. גודל המשתנה עצמו שונה לפי סוג הטיפוס שלו ויכול לנוע מבית אחד ועד טווח זכרון גדול של מגהבייטים שלמים. בנוסף לפעולת ההשמה ניתן לבצע גם פעולה של שליפת המידע שבמשתנה.
תוכן עניינים |
[עריכה] שמות
לכל משתנה חייב להיות שם. שם משתנה יכול להכיל רצף מכל סוג שהוא של אותיות ומספרים. ישנם תוים בודדים שאסור שיהיו בשם משתנה או בתחילתו. לצורך קריאות הקוד ישנן שיטות שונות לקבוע את שמות המשתנים. אחת הידועות שבהן היא "השיטה ההונגרית". אחד הדברים החשובים בהבנת קוד תוכנית הוא נתינת שמות משתנים משמעותיים וארוכים, שמסבירים את תפקידו של המשתנה בעצם שמו. לעיתים ישנן מוסכמות לקידומת של משתנה בהתאם לסוגו, ולטווח הכרתו. הדבר נפוץ בעיקר בהגדרת פקדים בטפסים, ומאפשר לנווט ביניהם בקלות.
[עריכה] הכרזה מפורשת והכרזה מרומזת
בחלק משפות התכנות כמו שפת C ושפת Pascal, חובה להכריז על המשתנה לפני השימוש בו. שימוש במשתנה בלי הכרזה מפורשת שלו תגרום להודעת שגיאה. שפות אחרות, בעיקר שפות סקריפט כמו VBScript לא דורשות מן התוכניתן להכריז על המשתנה בטרם השימוש בו, והמערכת מגדירה אותו בפעם הראשונה שהיא נתקלת בו. אם כי על פי נהלי התכנות המתוקנים, רצוי להכריז על כל המשתנים באופן מאורגן, והדבר תורם לקוד מסודר, איתור שגיאות כתיב, ולניפוי יעיל של הקוד. לעיתים יש שפות שיש בהן את שתי האפשרויות, לעבוד במוד של הכרזה מפורשת והכרזה מרומזת, על פי סוג ההצהרה בתחילת המודול. במסגרת שיכתוב מחדש של VB בסביבת ה.NET ניכרת המגמה להליכה אל עבר ההכרזה המפורשת.
[עריכה] סוג טיפוס
לכל משתנה יש טיפוס שקובע איזה סוג נתונים הוא יכול להכיל. גודל המשתנה שונה בהתאם לטיפוס ויכול להיות בטווח רחב. גודל קטן ביותר למשתנה מסוג בוליאני ותו ועד לגודל גדול למשתנה מסוג מערך או אובייקט. בחלק מהשפות (בעיקר אלו שבהן לא מחויבים להגדיר את המשתנים) יש טיפוס "כללי" שמאפשר לשים את רוב הערכים.
בשפות תכנות ישנן שתי גישות: גישה מצמצמת כמו ב-C שנותנת מספר מצומצם של משתנים בסיסיים, שמהוות אבני בניין בסיסיות לעומת הגישה המרחיבה כמו ב-VB שנותנת מספר רב של משתנים, לכיסוי טווח נרחב של אפשרויות.
סוגים טיפוסיים של משתנים הם: מספר שלם (בטווחים שונים), מספר ממשי - (נקודה צפה) (בטווחים שונים), תו, מחרוזת, מערך, רשומה, אובייקט וערך בוליאני, ישנן שפות שמוסיפות טיפוסים ספציפיים נוספים כמו משתני אוסף, תאריך ומטבע.
[עריכה] אורך חיים
אורך חיים הוא הטווח שבו המשתנה קיים פיסית. משתנה גלובלי יהיה קיים כל זמן שהתוכנה רצה. משתנה לוקאלי המוגדר בפונקציה יהיה קיים בזמן שהפונקציה מורצת, אך לפניה או אחריה הוא לא יהיה קיים כלל. משתנה גלובלי במחלקה יהיה קיים כאשר נוצר מופע של המחלקה. יכול להיות מצב שבו משתנה יהיה קיים, אך לא יהיה נגיש לפעילות באזור מסויים. ומאידך יכול להיות מצב שבו משתנה לא יהיה קיים, אך תוכנו ישמר כאשר הוא יוגדר מסוג סטטי.
[עריכה] טווח הכרה
טווח ההכרה הוא הטווח שבו המשתנים חשופים בתוך התוכנית. ישנם שלושה סוגים עיקריים של טווח הכרה במשתנים:
- משתנים גלובליים - מוכרים בכל התוכנית.
- משתנים לוקליים - מוכרים בבלוק או בשגרה שהגדירה אותן.
- נתוני אובייקט - האובייקט עצמו מוגדר כמשתנה גלובלי או לוקלי, אבל הנתונים שבתוכו מטופלים בצורה אחרת שמאפשרת להסתיר אותם מחלקים אחרים בתוכנית.
[עריכה] אתחול
בחלק מהשפות כמו למשל C, חובה לאתחל את המשתנה לערך מסויים, אחרת עלול להמצא בו "זבל" (שהוא ערך מספרי סתמי, שנמצא בזיכרון המחשב, עקב פעולות קודמות). בשפות אחרות נעשה אתחול אוטומטי בזמן ההגדרה של המשתנה, כך שמשתנה מספרי מאופס ומשתנה מחרוזתי מאותחל לערך ריק. בשפות שאין אתחול אוטומטי הדבר מאפשר גמישות ומאפשר למתכנת לבחור באיתחול או לוותר עליו, מכיוון שלפעמים אין צורך באתחול והדבר מבזבז פעולות מחשב, במיוחד כאשר מדובר במשתנים רבים. החיסרון שבחוסר אתחול אוטומטי שתמיד המתכנת צריך לדאוג לערכים שבמשתנה, ולעיתים אי תשומת לב מספקת לעניין, עלולה לגרום לבאגים שטותיים.
[עריכה] שימוש
על כל משתנה ניתן לבצע שתי פעולות: פעולת השמה של ערכים לתוכו, ופעולה של שליפת מידע הנתון בו. בדרך כלל ניתן לבצע פעולות השמה למשתנה, כאשר הנתונים המושמים בו, הם מסוג הטיפוס של המשתנה. פעולות על המשתנים יבוצעו בדרך כלל באמצעות אופרטורים שונים.
דוגמה שכוללת את שתי הפעולות היא היא למשל חישוב מתמטי של ערכים שנעשה בין משתנים שונים. בדוגמה הבאה:
A=B+C
התוכנה תשלוף את הנתון שקיים במשתנה C תחבר אותו לערך שקיים במשתנה B, ותבצע השמה של הערך החדש לתוך משתנה A. מכיוון שהפעולה המתמטית נעשת באופן הזה (מימין לשמאל), ערך התוצאה יהיה מוגבל לא רק לפי ערכו של משתנה A אלא גם לפי ערכו של משתנה B. במקרה שמשתנה B יהיה מטיפוס קטן יחסית למשתנה C, הערך יוגבל לפיו. למשל אם משתנים C וA הם מטיפוס נקודה צפה ומשתנה B הוא מספר שלם, התוצאה ב-A תמיד תהיה מספר שלם.
במקרה של השמת נתונים מטיפוס אחר מסוג המשתנה, לעיתים תתבצע שגיאת הידור ולעיתים תתבצע פעולת המרה באופן אוטומטי בהתאם לסוג הטיפוס, לשפת התכנות ולמהדר. כאשר נעשה ניסיון לבצע השמת מחרוזת למשתנה מטיפוס מספרי לרוב הדבר יהיה כרוך בהודעת שגיאה. לעומת זאת כאשר תתבצע השמה של מספר נקודה צפה (שבר) למספר שלם, יתבצע חיתוך של השארית, והתוכנה תמשיך לרוץ כרגיל. גם במקרה של השמה של מספר גדול למשתנה קטן שלא יכול להכיל אותו לא תופיע שגיאה, ותתבצע גלישה של המספר. דברים הפותחים פתח לבאגים של טעויות ואי דיוק חישובי, שקשה לנפות אותם לעומת באגים אחרים.
באמצעות משתנים ניתן לבצע פעולות חישוב שונות, גם בלי השמה למשתנה אחר או שליפה מפורשת. משתנים יכולים ל"ככב" בהתניה לוגית. למשל
If A+b > 5 then beep
שמשמעותה להשמיע צפצוף במקרה שצירוף הערכים שבמשתנים A ו-B גדול מ-5. במקרה זה בזמן ביצוע התנאי מתבצעת פעולה של חיבור הערכים שבמשתנים A וB באופן זמני והשוואה לערך של הקבוע 5. משתנים אלו ישמרו על ערכם ללא כל שינוי.
האינטרקציה בפעולות חישוביות איננה חייבת להיות רק בין משתנים, והיא יכולה להיות בין משתנה לקבוע ואף בין משתנה לפונקציה. כך למשל ניתן לבצע השמה של ערך שמוחזר מפונקציה + ערך של משתנה למשתנה אחר. לדוגמה
A=B+MaxOf(C,D)
שמשמעותו השם למשתנה A את הערך שבמשתנה B + את הערך שמוחזר מהפונקציה MaxOf כאשר הפונקציה מקבלת שני ערכים ומחזירה את הגדול שבהם.
[עריכה] דוגמאות של הגדרת משתנים
דוגמאות להגדרת משתנה בשם A מסוג Integer ואיתחול שלו בערך 5 בשפות תכנות שונות. ישנן שפות שחייבת להיות מילת קידומת מסויימת על מנת להכריז על משתנה כמו Var (קיצור של Variable) בפסקל וDIM (או Public או Private) בVB, וישנן שפות שבהן אין כתיבה של מילה קבועה, אלא כתיבת סוג הטיפוס עצמו לפני משתנה היא הוראה ליצירת משתנה. בדוגמאות ניתן לראות שהכתיבה בשפת C הינה התמציתית ביותר, ואילו הכתיבה בVB הינה המובנת ביותר.
[עריכה] פסקל
Var a: Integer=5;
[עריכה] C ו C++
int a=5;
[עריכה] VB
Dim a As Integer=5

