دستور return چیست !؟ (توضیحات معمول برای من قابل هزم نیست)
سلام دوستان.
میدونم که return یک مقدار رو بر میگردونه.
ولی متوجه نمیشم چرا یک مقدار باید برگرده !؟
به کجا باید برگرده !؟
مگه وقتی ما یک متغیر رو = با یک مقدار قرار میدیم، اون متقیر دیگه حاوی اون مقدار نیست !؟ پس چرا باید return بشه !؟
با تشکر.
مثلا یه متد درست میکنی واسه جمع 2عدد
public int sum(int a, int b) {
int c = a + b;
return c;
}
بعد از این متد استفاده میکنی ,2عدد بهش میدی خودش واست جمع میکنه .
int x=sum(4,2);
که x برابر میشه با 6.
بهتره شما برید دوست عزیز مباحث پایه ای بخش تابع ها رو مطالعه کنید.
شما تابع مینویسید که یک سری کارها رو انجام بده.
حالا این تابع وقتی شروع به کار میکنه بعد از اینکه کارش تموم شد یا یه مقدار رو برمیگردونه .یا احتیاجی نیست بعد از پایان عملیات، مقداری برگردونه.
مثلا شما میخواید تابع sum رو بنویسید .که دو عدد میگیره و مقدار جمع رو بر میگردونه...دقت کنید مقدار جمع رو برمیگردونه.
public int sum(int a , int b)
{
int result=a+b;
return result;
}
یعنی اگر این تابع رو صدا بزنید هرجا .یه مقدار رو به عنوان نتیجه برمیگردونه.و حالا میتونید این مقدار بازگشتی بریزید داخل یک متغییر دیگه.به دستور پایین دقت کنید.
int tmp=sum(3, 5);
الان وقتی تابع اجرا میشه .مقدار 8 رو برمیگردونه به اونجایی که صدا زده شده .پس مقدار tmp برابر 8 میشه.
توابع یا همون متد ها در جاوا بلوک های کدی اند که بسته به خواسته برنامه نویس کار های خاصی انجام میدن و اجرای برنامه و عملکرد اون کلا بوسیله متدها انجام میشه...(متد = عملکرد)
قسمت بالا رو که میدونین...حالا این متد هایی که برنامه نویس مینویسه، برای انجام کار مورد نظرشون (اجرای کدهای بدنشون) ممکنه نیازی به داده ورودی نداشته باشند(متدهایی که پرانتز باز وبسته خالی جلوشون میذاریم) که وظیفشونو انجام بدن...یا ممکنه داشته باشن(متدهایی که یه متغیر به عنوان پارامتر ورودی توی پرانتز جلوی متد مینویسیم)....ممکنه اطلاعات مورد نیازش رو از اجرای متدهای دیگه توی بدنه خودش به دست بیاره(مقادیری که اون متدهای دیگه برمیگردونن) یا اینکه ممکنه اینطور نباشه...
این در مورد تعریف ساده از ورودی متد...
همونطور که میدونی و بالاتر گفتم متدها بلوک های کد اند و هر متد کدهای بدنه خودش رو اجرا میکنه و این میشه عملکرد اون متد..حالا ما ممکنه یه متد دیگه(که یا خودمون نوشتیم یا اینکه تو لایبرری موجوده) رو در بدنه متدمون صدا بزنیم،وقتی اجراکننده کد به این قسمت از برنامه ما میرسه اجرای متد بیرونی رو متوقف میکنه و میره که کدهای بدنه متد صدا زده شده رو اجرا کنه...خب حالا اگه قرار باشه متد صدا زده شده مقداری رو در اختیار متد بیرونی قرار بده از کلمه return استفاده میکنیم به معنی بازگشت و این یعنی اینکه ای اجرا کننده ی کد(code pointer) این مقدار رو بگیر و برگرد بدش به متد بیرونی!!
حالا ممکنه متد صدا زده شده قرار نباشه مقداری رو محاسبه کنه و در اختیار متد بیرونی قرار بده(برگردونه) و قرار باشه مثلا بره فلان فیلد کلاس رو false کنه یا اینکه فقط یه پیغام رو نمایش بده و....اینجاست که میگیم این متد از نوع void هست یعنی هیچ مقداری برنمیگردونه...
int methodA(){//تعریف methodeA
int a = 4;
.
.
.
boolean b = methodB();//مقدار خروجی methodB رو ذخیره کردیم
methodB();//methodB رو صدا زدیم ولی خروجیشو ذخیره نکردیم
methodC();این متد خروجی نداره که بخوایم جایی ذخیره کنیم
int a = methodC();//خطای کامپایل میگیریم چون سعی کردیم خروجی این متد رو ذخیره کنیم ولی این متد خروجی نمیده
}
boolean methodB(){
boolean b;
//یه سری کار...
return b;
}
void methodC(){
//یه سری کار...
return;//میتونیم اینو ننویسیم
}
مثلا توی تکه کد مثال که بالا نوشتم خود methodeA خروجی از نوع int برمیگردونه(کارایی که توی بدنه واسش نوشتیم رو انجام میده و حاصل محاسبات (معمولا) رو تحویل میده(برمیگردونه) )
و methodB هم مقدار boolean برمیگردونه و ما این مقدار تحویلی رو در یه متغیر ذخیره کردیم...
methodC هم که هیچ مقداری تحویل نمیده(بر نمیگردونه)...
جمع بندی: ترد (به قول استاد آقاجانی،کارگر) اجرا کننده برنامه وقتی میره متدهای void رو اجرا کنه دست خالی برمیگرده و فقط رفته یه سری کارا انجام داده ولی وقتی میره متدهای با خروجی int یا هرنوع دیگه رو اجرا کنه یه بسته هم به متد بیرونی تحویل میده که محتویاتش همون مقداریه که return شده....
return در تابع ، مثل یک گزارش کار و یا نتیجه کار می باشد که وقتی کار تابع تمام شد می توانید آنرا داشته باشید و اینکه گفتید کجا برمی گرده ، دقیقا بجای اسم خودش می شینه، یعنی مقدار return شده پس از فراخوانی و اجرای تابع، بجای خود تابع می شیند مثلا
x = f(y);
مقدار بازگشتی پس از اجرای تابع f بجای f می نشیند و طبق دستور فوق می توانیم آنرا در x واریز کنیم.
هر وقت دستور return اجرا بشه اجرای تابع هم تمام میشه حتی اگر چنین خط کد از آن باقی مانده باشه
با سلام خدمت همه دوستانی ک نظر دادن و الطف کردن و اطلاعاتشون رو انتشار دادن من فک کنم بدونم مشکل دوس عزیزمون کجاست با توجه به اینکه خودم دانشجوی نرم افزار کامپیوتر هستم
ببینید دوست عزیز
من خودمم قبلا همچین سوالایی برام پیش میومد البته موقعی ک تو هنرستان درس میخوندم
حتی خیلی وقتا متوجه نمیشدم ک تفاوت متغیر ها توی چیه و به چه دردی میخورن و تابع چیه کلاس چیه
ولی تنها راه حلی ک واسه این کار وجود داره اینه باید پایه برنامه نویسیتو قوی کنی ینی درباره چیزی ک بلد نیستی باید سرچ کنی
و چند بار مثال دربارش حل کنی تا متوجه بشی
در باره این پرسشتونم همین کارو انجام بدین
چون نظرها و جوابهای بالا بسیار کامل هستش و من واقعا نمیدونم ک چی باید به این نظر ها اضافه کنم تا درست تر بشه.
ولی ی سایتی رو بهتون معرفی میکنم ک برین و تو این سایت مثال هاشو بخونین و مطاله کنین
بسیار سایت کاملی هستش درباره آموزشهای جاوا و اندروید
http://www.sokanacademy.com/categories/programming/java/tutorials
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .