המילה var
ניקח שתי פונקציות :
function Func1(x:integer) : integer; function Func2(x: var integer) : integer;
(אני מקווה שאין לי טעויות ב - SYNTAX, לא תכנתתי פסקל כבר 8 שנים לפחות). שתי הפונקציות מקבלות משתנה שלם ששמו X, ומחזירות תוצאה שלמה. ההבדל הוא שאם בתוך הפונקציה שינית את X, אז ב - Func1 ישתנה הערך שלו בתוכנית שקראה לפונקציה, וב - Func2 הערך שלו לא ישתנה. כלומר, אם כתבת בתוכנית הקוראת:
Var A,B,C,D:Integer; Begin A := 3; B := 5; C := Func1(A); D := Func2(B); End.
ונניח ש - Func1 ו - Func2 שתיהן נראות ככה:
function Func1(x:integer) : integer Begin x := x+5; Func1 := x; End; function Func2(x: var integer) : integer Begin x := x+5; Func2 := x; End;
אז אפשר לראות ששתי הפונקציות מחזירות בעצם את X+5, כלומר - בסיום התוכנית C יהיה 8, ו - D יהיה 10. ההבדל בין הפונקציות הוא ש - A לא ישתנה, כי קראנו ל - Func1 שמקבלת את
הערך שלו, ואילו B יהיה 10 בסיום התוכנית, כי Func2 קיבלה את
המשתנה עצמו. יש לזה שם טכני - By value, שזה אומר להעביר את הערך של המשתנה (כשלא משתמשים ב - var), ו - By reference, שזה אומר להעביר את המשתנה עצמו (כשמשתמשים ב - var). אתה יכול לחשוב על זה גם ככה - אם לא השתמשנו ב - var, הפונקציה יוצרת לעצמה משתנה חדש שקוראים לו x, מאתחלת אותו בערך שהועבר לה, ואין השפעה על התוכנית הקוראת. לעומת זאת, כשכן השתמשנו ב - var, הפונקציה לא יוצרת משתנה חדש אלא משתמשת במשתנה שהועבר לה - ואז היא יכולה לשנות אותו. כשמעבירים פרמטר לתוך הפונקציה במטרה שהיא תקרא אותו ולא תשנה אותו, הוא נקרא פרמטר IN. כשמעבירים פרמטר לתוך הפונקציה והיא משנה אותו בלי להתייחס לערכו הקודם, הוא נקרא פרמטר OUT. וכשמעבירים פרמטר לתוך הפונקציה והיא גם מתחשבת בערכו הנוכחי וגם משנה אותו - קוראים לו פרמטר IN/OUT. מקווה שעזרתי ומתנצל על טעויות בקוד