نمایش پست تنها
  #2  
قدیمی 07-22-2011
ali_zangeneh آواتار ها
ali_zangeneh ali_zangeneh آنلاین نیست.
کاربر عادی
 
تاریخ عضویت: Feb 2010
محل سکونت: کرمانشاه
نوشته ها: 50
سپاسها: : 54

31 سپاس در 21 نوشته ایشان در یکماه اخیر
ali_zangeneh به Yahoo ارسال پیام
Question call by value & call by refrence

سلام از مطلبی که فرستادی خیلی خوشم اومد و دستت درد نکنه موضوع ارجاع به توابع همیشه مساله ساز بوده ولی یه جاهایی حرفتو قبول ندارم.
اول اینکه سیشارپ با انهمه وسعتی که داره اصلا در حد و اندازه های سی پلاس پلاس نیست که چه برسه به سی یا ابجکتیو سی ولی من بحث سی پلاس پلاسشو که خودت پیش کشیدی رو باز میکنم.
ما در اکثر زبان های برنامه نویسی میتونیم یا ادرس یک متغیر (یعنی خود متغیر-همون کال بای ریفرنس) و هم یک کپی از متغیر (کال بای ولیو) رو به عنوان ارگومان ورودی به متد یا تابعی بفرستیم.
حالا توی همین سی پلاس پلاسی رو که کوچک تر از سیشارپ خوندیدش
ما میتونیم بیش از یک خروجی داشته باشیم از یک تابع یا متد میپرسی چطور خب ساده است ما دو تا عدد به یک تابع میفرستیم از نوع صحیح و با امضای کال بای ولیو
بعد دوتا متغیر دیگه از نوع اعشاری ولی با ارجاع یعنی اینکه ادرسشو میفرستیم به تابع حالا این متغیر های سری دوم میتونند ارایه یا هر شی دیگه ایی هم باشند.حالا در بدنه تابع ما میایم دو متغیر رو یه بار از هم کم میکنیم (دوتا متغیر سری اول از نوع صحیح و با ارجاع کال بای ولیو) و و درجش میکنیم توی متغیر محتوای متغیر اول از سری دوم و یک بار هم با هم جمع میکنم دوتا متغیر اولو و میریزم داخل متغیر دوم از سری دوم.
این کا رو با استفاده از عملگر های * و & انجام میدم.
این نمونه ایی از ارسال بصورت کال بای ریفرنس بود.
دلیلی وجود نداره که چون return یک مقدار رو یفرسته بصورت فراخوانی بازگشتی پشته سیستم برای یک متد دیگه ما نتونیم ارسال چند تایی انجام بدیم مثلا خود همین ریترن میتونه ادرس ابتدای یک ارایه رو به ما برگردونه و ما خودمون روی دیگر عناصر پیمایش بکنیم.
دوم اینکه شما اگه میخوای خروجی تابع 30 بشه که نباید a رو بهلاوه مساوی a+b میکردی ، یا مینوشتی a=a+b یا a+=b یا اینکه با عملگر & ادرس متغیر هاتو به تابع میفرستادی و با عملگر * با محتوای اونا کار میکردی.

کال بای ولیو و کال بای ریفرنس همیشه سوال کنکور و امتحان بوده و هست و اینکه به طور پیش فرض چه زبانی چه نوع ارجاعی رو دیفالت قرار داده که نشان ضعف اون زبان نیست
اگه مانیتونیم با سی پلاس پلاس کاری رو که به سادگی توی سیشارپ میشه انجام داد رو انجام بدیم از ضعف سی پلاس پلاس نیست از بی سوادی و کم تجربگی ماست .اگه همین سیشارپ دات نت نیومد خیلی ها نمیتونستند با خانه سازی بازی کردن ادعای برنامه نویسی بکنند.
اگه سی یا سی پلاس پلاس داره یه عمره جوابگوی تمام نیاز ها میشه و کامپایلر های قدرتمند و استانداردی رو داره به خاطر سادگی و صریح بودن دستوراتشه
کل ویژوال سیشارپ دات نت به اندازه یه دستور exit توی سی هم نیست
پاسخ با نقل قول
جای تبلیغات شما اینجا خالیست با ما تماس بگیرید