مقدار برگشتی از یک تابع
توابع، میتوانند مقدار برگشتی از هر نوع دادهای داشته باشند. این مقادیر میتوانند در محاسبات یا به دست آوردن یک داده مورد استفاده قرار بگیرند. در زندگی روزمره فرض کنید که کارمند شما یک تابع است و شما او را صدا میزنید و از او میخواهید که کار یک سند را به پایان برساند. سپس از او میخواهید که بعد از اتمام کارش سند را به شما تحویل دهد. سند همان مقدار برگشتی تابع است. نکته مهم در مورد یک تابع، مقدار برگشتی و نحوه استفاده شما از آن است. برگشت یک مقدار از یک تابع آسان است. کافیست در تعریف تابع به روش زیر عمل کنید :
fun functionName() -> returntype { return value }
returnType در اینجا نوع دادهای مقدار برگشتی را مشخص میکند (Float ،Int و …). در داخل بدنه تابع کلمه کلیدی return و بعد از آن یک مقدار یا عبارتی که نتیجه آن، یک مقدار است را مینویسیم. نوع این مقدار برگشتی می تواند از انواع ساده و یا اختیاری بوده و در هنگام نامگذاری تابع و بعد از پرانتزها و علامت -> ذکر شود. مثال زیر یک تابع که دارای مقدار برگشتی است را نشان میدهد:
1: func calculateSum() -> Int 2: { 3: let firstNumber :Int = 10 4: let secondNumber :Int = 5 5: 6: return firstNumber + secondNumber 7: } 8: 9: var result = calculateSum() 10: 11: print("Sum is \(result).")
Sum is 15.
همانطور که در خط 1 مثال فوق مشاهده میکنید، هنگام تعریف تابع و بعد از علامت پرانتز بسته، از -> Int استفاده کردهایم که نشان دهنده آن است که تابع ما دارای مقدار برگشتی از نوع اعداد صحیح است. در خطوط 3 و 4 دو ثابت تعریف و مقدار دهی شدهاند.
توجه کنید که این متغیرها، متغیرهای محلی هستند. و این بدان معنی است که این متغیرها فقط در تابعی که در آن تعریف شدهاند، قابل استفاده هستند. در خط 6 جمع دو ثابت، توسط دستور return برگشت داده میشود. یک متغیر به نام result در خط 9 تعریف میکنیم و تابع ()calculateSum را فراخوانی میکنیم.
تابع ()calculateSum مقدار 15 را بر میگرداند که در داخل متغیر result ذخیره میشود. در خط 11 مقدار ذخیره شده در متغیر result چاپ میشود. تابعی که در این مثال ذکر شد، تابع کاربردی و مفیدی نیست. با وجودیکه کدهای زیادی در تابع بالا نوشته شده ولی همیشه مقدار برگشتی 15 است، در حالیکه میتوانستیم به راحتی یک متغیر تعریف کرده و مقدار 15 را به آن اختصاص دهیم. این تابع در صورتی کارامد است که پارامترهایی به آن اضافه شود که در درسهای آینده توضیح خواهیم داد. هنگامی که میخواهیم در داخل یک تابع از دستور if یا switch استفاده کنیم، باید خود این دستورات را با کلمه return برگشت دهیم. برای درک بهتر این مطلب به مثال زیر توجه کنید :
1: func getNumber() -> Int 2: { 3: print("Enter a number greater than 10: ", terminator:"") 4: let number = Int(readLine()!) 5: 6: if (number! > 10) 7: { 8: return number! 9: } 10: else 11: { 12: return 0 13: } 14: } 15: 16: var result = getNumber() 17: 18: print("Result = \(result).")
Enter a number greater than 10: 11 Result = 11
Enter a number greater than 10: 9 Result = 0
در خطوط 14-1 یک تابع با نام ()getNumber تعریف شده است که از کاربر یک عدد بزرگتر از 10 را میخواهد. اگر عدد وارد شده توسط کاربر درست نباشد تابع مقدار صفر را بر میگرداند. اگر قسمت else دستور if و یا دستور return را از آن حذف کنیم در هنگام اجرای برنامه با پیغام خطا مواجه میشویم.
چون اگر شرط دستور if نادرست باشد (کاربر مقداری کمتر از 10 را وارد کند) برنامه به قسمت else میرود تا مقدار 0 را بر گرداند و چون قسمت else حذف شده است برنامه با خطا مواجه میشود و همچنین اگر دستور return حذف شود چون برنامه نیاز به مقدار برگشتی دارد، پیغام خطا میدهد.