Tuesday, May 18, 2010

pass by reference & pass by value ...

و هوا ده حال معظم الناس أما تسمع لأول مرة ال pass by value و ال pass by reference

و علشان كده خلينا ناخد الموضوع بمثال ظريف كده

تخيل ان أنا رحت لواحد صاحبى اسمه محمد

فلقيته بيقوللى ... أنا الحمد لله بنيت عمارة

قولتله مبروووووك ... هيا كام دور ؟

فقالى دى 3 أدوار

مممممممم.... فقررت أبنى العمارة بتاعتى و تكون نفس عدد أدوار العمارة بتاعت محمد

و فعلا خلصت العمارة و كل حاجة تماااام

ولكن المسموح ليا كان دورين بس ... قام الناس جم و شالولى آخر دور لأنه مش قانونى

نسأل سؤالنا بقى دلوقتى ... هل عمارة محمد اتأثرت أما اتهدم عندى آخر دور ... لأ طبعا ... علشان دى عمارو ة دى عمارة ... المتشابه بينهم بس ان همما كانوا متساويين فى عدد(value) الأدوار

و علشان كده أما تبعت parameter ل method معينة by value ... فانت بتديها ال value بتاعت ال variable علشان تتحط فى ال variable اللى هايستقبل ال value دى فى ال function header .. و بالتالى أى تغيير في ال variable بتاع ال function مش هيأثر فيها بأى شكل من الأشكال ... لأنك عملت عمارة جديده ... أو variable جديد بنفس ال value

ارجع معايا بقى من أول القصة .... تخيل اننى دلوقتى قابلت محمد و هوا بيتفق مع المقاول اللى هايعمله العمارة

فا قولتله أنا هاشركك فيها ... قاللى مافيش مشكلة .. و اتفقنا و كل حاجة تمام

نفس الموقف حصل ... كان فيه دور غير قانونى فى العمارة بتاعتى

قام الناس جم و شالولى آخر دور لأنه مش قانونى

نسأل سؤالنا بقى دلوقتى ... هل عمارة محمد اتأثرت أما اتهدم عندى آخر دور ... آه طبعا ... علشان عمارتى هى عمارة محمد .. أى حاجة هاتحصل فى عمارتى .. هاتحصل فى عمارة محمد علشان فى الآخر هما عمارة واحدة

و عنوان(reference) عمارتى هو عنوان عمارة محمد

و ممكن تقول ان دى عمارة اسلام أو ممكن تقول دى عمارة محمد

و علشان كده أما تبعت parameter ل method معينة by reference ... فانت بيكون عندك نفس ال memory address بس ليه اسمان فلو ال variable المبعوت اسمه x و ال variable اللى فى ال function header اسمه y يبقى انت كده عندك memory address واحد مشاور عليه x و y فأى تغيير فى العمارة أو فى ال variable اللى اسمه x هايغير فى الvariable اللى اسمه y علشان همما فى الآخر بيشاوروا على نفس ال memory address

Note: This is a link to 2 slides made by LVAD to illustrate this topic

1 comment: