مقدار برگشتی از یک متد

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

returnType MethodName()
{
   return value;
}

returnType در اینجا نوع داده ای مقدار برگشتی را مشخص می کند (int،bool،…). در داخل بدنه متد کلمه کلیدی return و بعد از آن یک مقدار یا عبارتی که نتیجه آن یک مقدار است را می نویسیم. نوع این مقدار برگشتی باید از انواع ساده بوده و در هنگام نامگذاری متد و قبل از نام متد ذکر شود. اگر متد ما مقدار برگشتی نداشته باشد باید از کلمه void قبل از نام متد استفاده کنیم. مثال زیر یک متد که دارای مقدار برگشتی است را نشان می دهد.

  1: #include <iostream>
  2: using namespace std;
  3: 
  4: int CalculateSum()
  5: {
  6:     int firstNumber = 10;
  7:     int secondNumber = 5;
  8: 
  9:     int sum = firstNumber + secondNumber;
 10: 
 11:     return sum;
 12: }
 13: 
 14: int main()
 15: {
 16:     int result = CalculateSum();
 17: 
 18:     cout << "Sum is " << result;
 19: }
Sum is 15.

همانطور که در خط 4 مثال فوق مشاهده می کنید هنگام تعریف متد از کلمه int به جای void استفاده کرده ایم که نشان دهنده آن است که متد ما دارای مقدار برگشتی از نوع اعداد صحیح است. در خطوط 6 و 7 دو متغیر تعریف و مقدار دهی شده اند.

توجه کنید که این متغیرها، متغیرهای محلی هستند. و این بدان معنی است که این متغیرها در سایر متدها مانند متد ()main قابل دسترسی نیستند و فقط در متدی که در آن تعریف شده اند قابل استفاده هستند. در خط 10 جمع دو متغیر در متغیر sum قرار می گیرد. در خط 11 مقدار برگشتی sum توسط دستور return فراخوانی می شود. در داخل متد ()main یک متغیربه نام result در خط 16 تعریف می کنیم و متد ()CalculateSum را فراخوانی می کنیم.

متد ()CalculateSum مقدار 15 را بر می گرداند که در داخل متغیر result ذخیره می شود. در خط 18 مقدار ذخیره شده در متغیر result چاپ می شود. متدی که در این مثال ذکر شد متد کاربردی و مفیدی نیست.با وجودیکه کدهای زیادی در متد بالا نوشته شده ولی همیشه مقدار برگشتی 15 است، در حالیکه می توانستیم به راحتی یک متغیر تعریف کرده و مقدار 15 را به آن اختصاص دهیم. این متد در صورتی کارامد است که پارامترهایی به آن اضافه شود که در درسهای آینده توضیح خواهیم داد. هنگامی که می خواهیم در داخل یک متد از دستور if یا switch استفاده کنیم باید تمام کدها دارای مقدار برگشتی باشند. برای درک بهتر این مطلب به مثال زیر توجه کنید :

  1: #include <iostream>
  2: using namespace std;
  3: 
  4: int GetNumber()
  5: {
  6:     int number;
  7: 
  8:     cout << "Enter a number greater than 10: ";
  9:     cin >> number;
 10: 
 11:     if (number > 10)
 12:     {
 13:         return number;
 14:     }
 15:     else
 16:     {
 17:         return 0;
 18:     }
 19: }
 20: 
 21: int main()
 22: {
 23:     int result = GetNumber();
 24: 
 25:     cout << "Result is " << result;
 26: }
Enter a number greater than 10: 11
Result = 11

Enter a number greater than 10: 9
Result = 0

در خطوط 4-19 یک متد با نام ()GetNumber تعریف شده است که از کاربر یک عدد بزرگتر از 10 را می خواهد. اگر عدد وارد شده توسط کاربر درست نباشد متد مقدار صفر را بر می گرداند. و اگر قسمت else دستور if و یا دستور return را از آن حذف کنیم در هنگام اجرای برنامه با پیغام خطا مواجه می شویم.

چون اگر شرط دستور if نادرست باشد (کاربر مقداری کمتر از 10 را وارد کند) برنامه به قسمت else می رود تا مقدار صفر را بر گرداند و چون قسمت else حذف شده است برنامه با خطا مواجه می شود و همچنین اگر دستور return حذف شود چون برنامه نیاز به مقدار برگشتی دارد پیغام خطا می دهد. و آخرین مطلبی که در این درس می خواهیم به شما آموزش دهیم این است که شما می توانید از یک متد که مقدار برگشتی ندارد خارج شوید. حتی اگر از نوع داده ای void در یک متد استفاده می کنید باز هم می توانید کلمه کلیدی return را در آن به کار ببرید. استفاده از return باعث خروج از بدنه متد و اجرای کدهای بعد از آن می شود.

  1: #include <iostream>
  2: using namespace std;
  3: 
  4: void TestReturnExit()
  5: {
  6:     cout << "Line 1 inside the method TestReturnExit()" << endl;
  7:     cout << "Line 2 inside the method TestReturnExit()" << endl;
  8: 
  9:     return;
 10: 
 11:     //The following lines will not execute              
 12:     cout << "Line 3 inside the method TestReturnExit()" << endl;
 13:     cout << "Line 4 inside the method TestReturnExit()" << endl;
 14: }
 15: 
 16: int main()
 17: {
 18:     TestReturnExit();
 19: 
 20:     cout << "Hello World!";
 21: }
Line 1 inside the method TestReturnExit()
Line 2 inside the method TestReturnExit()
Hello World!

در برنامه بالا نحوه خروج از متد با استفاده از کلمه کلیدی return و نادیده گرفتن همه کدهای بعد از این کلمه کلیدی نشان داده شده است. در پایان برنامه متد تعریف شده (()TestReturnExit) در داخل متد ()main فراخوانی و اجرا می شود.