در این آموزش قصد داریم تا به معرفی دستور return در زبان برنامهنویسی جاوا و کاربرد آن در دستورات داخلی متدها پرداخته و در ادامه نحوۀ عملکرد متدهایی با مقادیر بازگشتی را تشریح نماییم. برای درک بهتر کاربرد دستور return در مثال مطرحشده در آموزش پیشین، فرض میکنیم که قرار است تا مثلاً پس از خرید اقلام مورد نیاز خود از سوپرمارکت بلافاصله به خانه بازگردیم که پیادهسازی چنین شرایطی با دستور return در زبان برنامهنویسی جاوا امکانپذیر میباشد.
در واقع، دستور return در یک متد منجر بدین میشود تا متد مذکور پس از فراخوانی دیتایی را در خروجی بازگرداند که این دیتا را میتوان در سایر نقاط برنامه مورد استفاده قرار داد و این در حالی است که سایر متدهایی که در آنها دستور return به کار گرفته نمیشود، صرفاً یکسری دستور را اجرا کرده و دیتایی را در خروجی ریترن نمیکنند.
در این مرحله به منظور درک کاربرد دستور return در دستورات داخلی متدها، سناریوی جدیدی بدین صورت تعریف میکنیم و در آن فرض میکنیم که برای برنامهنویسی از یک کامپیوتر شخصی استفاده میکنیم اما قصد داریم تا یک لپتاپ برای خود تهیه نماییم تا همواره همراه ما باشد و بتوانیم در هر جایی به راحتی روی پروژههای خود کار کنیم اما از قیمت لپتاپهای متناسب با نیازمان اطلاعی نداریم و بدین دلیل نمیتوانیم هزینۀ خرید آن را از قبل تهیه کرده و همراه خود به مرکز خرید کامپیوتر ببریم. بنابراین به مرکز خرید رفته و جستجوی خود را آغاز مینماییم تا محدودۀ قیمت لپتاپی متناسب با نیازمان را به دست آورده و در نهایت هزینۀ مورد نیاز برای خرید لپتاپ را به عنوان مقدار حاصل از جستجوی خود تهیه نماییم که برای پیادهسازی چنین سناریویی، پروژهای جدید تحت عنوان BuyingALaptop ایجاد کرده و کلاسی به نام MainClass در آن میسازیم و در ادامه کد مربوط به این کلاس را به صورت زیر تکمیل میکنیم:
public class MainClass {
public int goToComputerComplex() {
int laptopPrice = 0;
return laptopPrice;
}
}
در کد فوق، متدی از جنس int تحت عنوان ()goToComputerComplex با سطح دستری public ایجاد کرده و داخل آن نیز با استفاده از دیتا تایپ int متغیری به نام laptopPrice با مقدار اولیۀ 0 تعریف میکنیم که این متغیر قرار است تا هزینۀ خرید لپتاپ را نگهداری نماید. از سوی دیگر، متغیر laptopPrice یک متغیر به اصطلاح Local در متد فوق بوده و صرفاً در داخل متد مذکور میتوان بدان دسترسی داشت (در آموزش آشنایی با متغیرهای Local و Field در زبان برنامهنویسی جاوا به معرفی متغیرهای لوکال، نحوۀ تعریف و همچنین کاربرد آنها در متدها و کلاسهای تعریفشده در زبان جاوا پرداختهایم.) به علاوه، مشابه آنچه در آموزش آشنایی با انواع سطوح دسترسی در زبان برنامهنویسی جاوا آموختیم، سطح دسترسی public در تعریف متد ()goToComputerComplex بدین معنا است که متد مذکور از تمامی نقاط برنامه قابلدسترسی میباشد.
به طور کلی، چنانچه بخواهیم تا متدی تعریف کنیم که در صورت فراخوانی دادهای را به اصطلاح «ریترن کند» یا «بازگرداند»، میباید نوع دادۀ مربوط به مقدار بازگشتی را پیش از نام متد مورد نظر بنویسیم. به طور مثال، اگر بخواهیم که متدی پس از فراخوانی مقداری از جنس عدد اعشاری را ریترن کند، کلیدواژۀ double را پیش از نام متد مینویسیم و یا به عنوان مثالی دیگر چنانچه بخواهیم تا مقدار بازگشتیِ متدی دادهای از جنس بولین (true یا false) باشد، میباید پیش از نام متد مربوطه کلیدواژۀ boolean را بنویسیم. در این آموزش قصد داریم تا متد ()goToComputerComplex مقدار مربوط به هزینۀ لپتاپ از نوع دادۀ int یا عدد صحیح را در خروجی ریترن کند و از همین روی در تعریف متد مذکور به جای کیورد void از کلیدواژۀ int استفاده نمودهایم.
حال به منظور فراخوانی متد ()goToComputerComplex نیاز داریم تا آبجکتی از روی کلاس مربوطه در کلاس دیگری ساخته و آن را روی آبجکت جدید ساختهشده فراخوانی نماییم که در همین راستا، مشابه آموزشهای پیشین، یک کلاس جدید تحت عنوان ActionClass ایجاد کرده و جهت تعریف این کلاس به عنوان نقطۀ شروع برنامۀ خود نیز در حین ساخت آن تیک گزینۀ public static void main را میزنیم و در ابتدا کدی به صورت زیر خواهیم داشت:
public class ActionClass {
public static void main(String[] args) {
}
}
در ادامه، آبجکتی از روی کلاس MainClass داخل کلاس ActionClass ایجاد میکنیم و برای این منظور کد فوق را به صورت زیر تکمیل مینماییم:
public class ActionClass {
public static void main(String[] args) {
MainClass myObject = new MainClass();
}
}
مشابه آنچه در آموزش مقدمهای بر مفهوم شیئگرایی در زبان برنامهنویسی جاوا آموختیم، یک آبجکت جدید تحت عنوان myObject از روی کلاس MainClass ایجاد کرده و با این کار به متد تعریفشده در کلاس MainClass دسترسی پیدا میکنیم. همانطور که پیشتر اشاره کردیم، متد ()goToComputerComplex دادهای از جنس عدد صحیح را ریترن میکند. بنابراین با استفاده از دیتا تایپ int متغیری به نام totalPrice تعریف کرده و نتیجۀ حاصل از فراخوانی متد ()goToComputerComplex روی آبجکت جدید ساختهشده از روی MainClass را بدان منتسب میکنیم و بدین ترتیب دیتای ریترنشده از فراخوانی این متد در متغیر totalPrice ذخیره میشود به طوری که خواهیم داشت:
public class ActionClass {
public static void main(String[] args) {
MainClass myObject = new MainClass();
int totalPrice = myObject.goToComputerComplex();
}
}
با اجرای برنامۀ فوق، متد ()goToComputerComplex فراخوانی شده و مقدار منتسب به متغیر laptopPrice از کلاس MainClass در خروجی ریترن شده و به متغیر totalPrice از کلاس ActionClass اختصاص داده میشود که در این مرحله برای مشاهدۀ مقدار منتسب به متغیر totalPrice از متد ()println استفاده کرده و آن را به همراه استرینگی به صورت زیر در کنسول چاپ مینماییم:
public class ActionClass {
public static void main(String[] args) {
MainClass myObject = new MainClass();
int totalPrice = myObject.goToComputerComplex();
System.out.println("The price of my laptop is: " + totalPrice);
}
}
در کد فوق، در دستور سطر پنجم گفتهایم مقدار اختصاصیافته به متغیر totalPrice با استفاده از عملگر + با استرینگ «:The price of my laptop is» کانکت شده و در کنسول چاپ گردد. بنابراین با اجرای برنامۀ فوق در خروجی خواهیم داشت:
The price of my laptop is: 0همانطور که مشاهده میکنیم، برنامه به درستی کار کرده و تنها مقدار اختصاصیافته به متغیر laptopPrice معادل عدد 0 که با فراخوانی متد ()goToComputerComplex در خروجی ریترن شده و به متغیر totalPrice منتسب میشود را به همراه استرینگ مربوطه در کنسول چاپ مینماید. در ادامه، مقدار عددیِ منتسب به متغیر laptopPrice در کلاس MainClass را به عدد 28000000 تغییر میدهیم به طوری که در کد زیر داریم:
public class MainClass {
public int goToComputerComplex() {
int laptopPrice = 28000000;
return laptopPrice;
}
}
حال مجدداً برنامه را اجرا میکنیم و بدین ترتیب در خروجی خواهیم داشت:
The price of my laptop is: 28000000
همانطور که ملاحظه میکنیم، به محض تغییر مقدار اختصاصیافته به متغیر laptopPrice مقدار ریترنشده از متد ()goToComputerComplex نیز تغییر پیدا میکند.
