העברת פרמטרים by value - result?

העברת פרמטרים by value - result?

שלום לכולם. נתקלתי במבחן שהיה לי היום בשפות תכנות במונח הזה, ולא ממש הבנתי מה הכוונה. אני מכיר by value או by address מה הכוונה של " by value - result"? מישהו יודע? תודה מראש.
 

eyalbd

New member
די דומה

אבל הכוונה כאן לערך המוחזר מפונקציה. יש פונקציות שמחזירות כתובת ויש כאלה שמחזירות עותק של משתנה לוקלי. לזה מתכוונים בד"כ כשאומרים return by value
 
לא הבנתי.

אם לדוגמה יש לי פונקציה בשם SWAP שמקבלת שני משתנים ומחליפה ביניהם. נניח שאני קורא לה עם X ו עם Y. אם היא מקבלת את הפרמטרים BY VALUE היא לא תעשה כלום. אם אדפיס אותם אחרי הקריאה לפונקציה, הם יודפסו בדיוק כפי שהיו לפני הקריאה לה. אם היא מקבלת את הפרמטרים BY ADDRESS היא תחליף ביניהם, וההדפסה תהיה בסדר הפוך. השאלה היא מה יקרה אם העברת הפרמטרים היא BY VALUE-RESULT?
 
מממ...../images/Emo26.gif

נניח יש לך פונקציה שעושה פעולה מסויימת ומחזירה לך אובייקט. אם הפונקציה מחזירה את האובייקט עצמו - זה by value, ואם היא מחזירה את הכתובת של האובייקט - זה by address. למה זה טוב? למשל אם האובייקט מאוד גדול, במקום להעתיק אותו בשביל להחזיר את הערך שלו - אתה מחזיר ערך של pointer שהוא הרבה יותר "קל". ענה לך?
 
אם כך, אז זה קשור אך ורק להחזרת

הערך מהפונקציה ולא קשור בכלל להעברת הפרמטרים אליה? זאת אומרת, למשל, שכשמדובר בפרוצדורה (שלא מחזירה ערכים) אין לזה שום משמעות והיא לא תבצע כל שינוי בארגומנטים שקיבלה? (כמו בדוגמת ה SWAP)?
 
by value ו-by address קשור...../images/Emo26.gif

אבל אתה שאלת מה המשמעות בהקשר של result (=ערך מוחזר). לפרוצדורה אין result (=ערך מוחזר) אלא רק פעולות-לוואי. לשאלתך - באותו אופן אפשר להעביר ארגומנטים לפונקציה/פרוצדורה. אם יש לי משתנה מטיפוס integer שיושב בכתובת 1000 וערכו 7 - אז אני יכול להעביר לפונקציה את הערך 7 (by value) או להעביר לה את הערך 1000 (by address - כלומר הכתובת של המשתנה). ושוב - לכל שיטה היתרונות/חסרונות שלה. אם מדובר באובייקט גדול - נעדיף אולי לשלוח רק את הכתובת. אם נרצה (מסיבות של security או מסיבות של הנדסת-תוכנה) לא לאפשר לפונקציה/פרוצדורה לשנות את הערך של המשתנה - נעדיף אולי להעביר את הערך by value. אם נרצה שהפונקציה/פרוצדורה דווקא כן תשנה ערך של משתנה (כמו בדוגמה של ה-swap) - נעביר לה את הכתובת. וכו'...
 
תודה.

זה פחות או יותר מה שניחשתי במבחן שהיה לי אתמול. נקווה לטוב
 
למעלה