برگرداندن مقادیر متدها در جاوا

چاپ

هنگامی که یکی از رویدادهای زیر اتفاق بیافتند، یک متد به کار خود پایان می دهد:

 نوع مقدار برگشتی از یک متد می تواند از هر نوعی  باشد، مثلا می تواند از نوع int یا double یا char یا ... باشد. و یا اینکه می تواند از نوع کلاس باشد.این امکان نیز وجود دارد که یک متد هیچ چیز را برنگرداند، که در این صورت می گوییم این متد از نوع void است. بعنوان مثال، تعریف متد ()nameAndAddress که قبلا در عکس 3.4 نشان داده شد، به صورت زیر است:

مثال(متدهای برگرداننده ی مقادیر در جاوا)

public static void nameAndAddress()

 سطح دسترسی این متد، public است و هیچ مقداری را برنمی گرداند، بنابراین نوع برگشتی آن void می باشد. 

فرض کنید بخواهیم یک متد بنویسیم که قادر باشد تا مقادیر true و falseرا برگرداند، به صورت زیر عمل می کنیم:

مثال(متدهای برگرداننده ی مقادیر در جاوا)

public boolean workedOvertime()

 متد بالا یک مقدار بولین را برمی گرداند، بنابراین از نوع boolean می باشد. 

نکته: یک متد، علاوه بر اینکه می تواند نوع های برگشتی اولیه را برگرداند، قادر است تا یک کلاس را برگرداند. اگر اپلیکیشن شما حاوی یک کلاس به نام BankLoan باشد، با استفاده از یک متد به صورت زیر می توانیم یک نمونه از این کلاس را برگردانیم:

مثال(متدهای برگرداننده ی مقادیر در جاوا)

public BankLoan approvalProcess()

به عبارت دیگر، یک متد قادر است تا هر چیزی را برگرداند. از یک مقدار از نوع int گرفته تا یک کلاس. 

 متد ()predictRaise که قبلا نشان داده شد، یک خروجی را تولید می کند اما هیچ مقداری را برنمی گرداند. بنابراین نوع برگشتی آن void است. اگر می خواهید یک متد ایجاد کنید که به جای نمایش دادن یک مقدار، آن را برگرداند، به صورت زیر عمل کنید:

مثال(متدهای برگرداننده ی مقادیر در جاوا)

public static double predictRaise(double moneyAmount)

عکس 3.12 این متد را نشان می دهد:

 

 به خط اول از کدهای عکس بالا توجه کنید.همان طور که مشاهده می کنید، نوع برگشتی این متد double است که با رنگ آبی نشان داده شده است.  همچنین به بخش آبی رنگ در انتهای این متد توجه کنید که از دستور return در آن استفاده شده است. این دستور return، باعث می شود تا این متد مقداری را ( به متدی که آن را فراخوانی کرده است) برگرداند. بعنوان مثال در تصویر بالا، مقدار قرار گرفته در متغیر newAmount  به آن متدی که متد ()predictRaise را فراخوانی کرده است، برگردانده خواهد شد. 

 نوع برگشتی یک متد باید با نوع مقداری که با استفاده از دستور return می خواهیم آن را برگردانیم ، تطابق داشته باشد. در غیر این صورت کلاس ما کامپایل نخواهد شد. همچنین یک متد حداکثر می تواند یک مقدار را برگرداند. این مقدار می تواند یک داده ی اولیه مثل int یا char یا double باشد و یا می تواند از نوع کلاس باشد. 

نکته:  تمامی متد ها به جز متدهای void به یک دستور return نیاز دارند تا یک مقدار با یک نوع مناسب را برگرداند. اما این امکان وجود دارد که یک دستور return به همراه یک سمی کالن را در داخل یک متد از نوع void قرار دهیم ولی اکثر برنامه نویسان جاوا این کار را انجام نمی دهند. 

 این امکان وجود ندارد که پس از دستور return دستورات دیگری را قرار دهید. اگر در خطوط زیرین دستور return کدهایی را قرار دهید، این کدها غیرقابل دسترس خواهند بود و اجرا نخواهند شد و باعث ایجاد یک خطا در کامپایلر خواهند شد. 

 نکته: در صورتی که از دستورات return در داخل عبارات شرطی استفاده کنیم، این امکان وجود دارد تا در داخل یک متد، از چند دستور return استفاده کنیم. اما این کار توصیه نمی شود، زیرا می تواند منجر به ایجاد خطاهایی شود که تشخیص آنها سخت است. اما در این حالت هم نمی توان پس از آخرین دستور return دستورات دیگری را قرار داد. بعداً در این کتاب با موارد بیشتری آشنا خواهید شد. 

 


اگر یک متد مقداری را برگرداند، آنگاه هنگامی که شما این متد را فراخوانی کنید، می توانید از آن مقدار استفاده کنید. اما مجبور نیستید تا حتما آن مقدار را مورد استفاده قرار دهید. بعنوان مثال، اگر شما متد ()predictRaise را فراخوانی کنید، ممکن است بخواهید مقدار برگردانده شده را در داخل یک متغیر به نام myNewSalary که از نوع double است قرار دهید، درست مثل زیر:

مثال

myNewSalary = predictRaise(mySalary);

 متد ()predictRaise مقداری از نوع double را برمی گرداند، بنابراین باید آن مقدار را در داخل یک متغیر از نوع double قرار دهیم. 

بعنوان یک روش دیگر، باید بگوییم که شما می توانید به طور مستقیم از مقدار برگردانده شده توسط یک متد استفاده کنید بدون اینکه مقدار آن را در داخل یک متغیر ذخیره کنید. بعنوان مثال، بصورت زیر می توانید بطور مستقیم از یک مقدار برگردانده شده استفاده کنید:

مثال

System.out.println("New salary is " + calculateRaise(mySalary));

 همان طور که در عبارت بالا مشاهده می کنید، متد ()calculateRaise در داخل متد ()println فراخوانی شده است. چون که متد ()calculateRaise یک مقدار از نوع double را برمی گرداند، ما می توانیم درست مانند یک مقدار از نوع double با آن رفتار کنیم. بعنوان یک مثال دیگر، ما می توانیم بر روی مقدار برگشتی از یک متد، محاسباتی را انجام دهیم: 

مثال

double spendingMoney = calculateRaise(mySalary) – expenses;

 


فراخوانی زنجیره ای متدها

 متدها می توانند دیگر متدها، را مورد فراخوانی قرار دهند. بعنوان مثال، متد ()main می تواند متد ()predictRaise را فراخوانی کند و متد ()predictRaise هم می تواند متد ()calculateBonus را فراخوانی کند. درست مثل عکس 3.13 در زیر:

 

با نگاه به فراخوانی متد ()calculateBonus که در داخل متد ()predictRaise قرار گرفته است، دقیقا نمی توان متوجه شد که این متد چه کاری را انجام می دهد. و تنها چیزی که می فهمیم، این است که متد ()calculateBonus یک مقدار از نوع double را بعنوان پارامتر می پذیرد(زیرا متغیر newAmount به آن داده شده است). و اینکه این متد یک مقدار از نوع double را برمی گرداند. (زیرا حاصل آن در داخل متغیر bonusAmount قرار می گیرد). بعنوان مثال، متد ()calculateBonus می تواند شبیه به متد نشان داده شده در عکس 3.14 باشد. در این متد، به حقوق یک شخص، مقداری جایزه به اندازه ی 50.00 دلار اضافه می شود: