مقدار برگشتی از یک تابع
توابع میتوانند مقدار برگشتی از هر نوع دادهای داشته باشند. این مقادیر میتوانند در محاسبات یا به دست آوردن یک داده مورد استفاده قرار بگیرند. در زندگی روزمره فرض کنید که کارمند شما یک تابع است و شما او را صدا میزنید و از او میخواهید که کار یک سند را به پایان برساند. سپس از او میخواهید که بعد از اتمام کارش سند را به شما تحویل دهد. سند همان مقدار برگشتی تابع است. نکته مهم در مورد یک تابع، مقدار برگشتی و نحوه استفاده شما از آن است. برگشت یک مقدار از یک تابع آسان است. کافیست در تعریف تابع به روش زیر عمل کنید :
def functionName(): return value
در داخل بدنه تابع کلمه کلیدی return و بعد از آن یک مقدار یا عبارتی که نتیجه آن یک مقدار است را مینویسیم. مثال زیر یک تابع که دارای مقدار برگشتی است را نشان میدهد.
1: def CalculateSum(): 2: firstNumber = 10 3: secondNumber = 5 4: sum = firstNumber + secondNumber 5: 6: return sum 7: 8: result = CalculateSum() 9: 10: print("Sum is {0}.".format(result))
Sum is 15.
همانطور که مشاهده میکنید، در خطوط 6-1 یک تابع تعریف کرده ایم. در خطوط 2 و 3 دو متغیر تعریف و مقدار دهی شدهاند. توجه کنید که این متغیرها، متغیرهای محلی هستند. و این بدان معنی است که این متغیرها در سایر تابعها، قابل دسترسی نیستند و فقط در تابعی که در آن تعریف شدهاند قابل استفاده هستند. در خط 4 جمع دو متغیر در متغیر sum قرار میگیرد. در خط 6 مقدار برگشتی sum توسط دستور return فراخوانی میشود. در خط 8 یک متغیر به نام result تعریف کرده و تابع CalculateSum() را فراخوانی میکنیم.
تابع CalculateSum() مقدار 15 را بر میگرداند که در داخل متغیر result ذخیره میشود. در خط 10 مقدار ذخیره شده در متغیر result چاپ میشود. تابعی که در این مثال ذکر شد تابع کاربردی و مفیدی نیست. با وجودیکه کدهای زیادی در تابع بالا نوشته شده ولی همیشه مقدار برگشتی 15 است، در حالیکه میتوانستیم به راحتی یک متغیر تعریف کرده و مقدار 15 را به آن اختصاص دهیم. این تابع در صورتی کارامد است که پارامترهایی به آن اضافه شود که در درسهای آینده توضیح خواهیم داد. هنگامی که میخواهیم در داخل یک تابع از دستور if استفاده کنیم باید تمام کدها دارای مقدار برگشتی باشند. برای درک بهتر این مطلب به مثال زیر توجه کنید :
1: def GetNumber(): 2: number = int(input("Enter a number greater than 10: ")); 3: if (number > 10): 4: return number; 5: else: 6: return 0; 7: 8: result = GetNumber(); 9: 10: print("Result = {0}.".format(result));
Enter a number greater than 10: 11 Result = 11
Enter a number greater than 10: 9 Result = 0
در خطوط 6-1 یک تابع با نام GetNumber() تعریف شده است که از کاربر یک عدد بزرگتر از 10 را میخواهد. اگر عدد وارد شده توسط کاربر درست نباشد تابع مقدار صفر را بر میگرداند. و اگر قسمت else دستور ifو یا دستور return را از آن حذف کنیم در هنگام اجرای برنامه با پیغام خطا مواجه میشویم.
چون اگر شرط دستور if نادرست باشد (کاربر مقداری کمتر از 10 را وارد کند) برنامه به قسمت else میرود تا مقدار صفر را بر گرداند و چون قسمت else حذف شده است برنامه با خطا مواجه میشود و همچنین اگر دستور return حذف شود چون برنامه نیاز به مقدار برگشتی دارد پیغام خطا میدهد. و آخرین مطلبی که در این درس میخواهیم به شما آموزش دهیم این است که شما میتوانید از یک تابع که مقدار برگشتی ندارد خارج شوید. استفاده از return باعث خروج از بدنه تابع و اجرای کدهای بعد از آن میشود:
1: def TestReturnExit(): 2: print("Line 1 inside the method TestReturnExit()"); 3: print("Line 2 inside the method TestReturnExit()"); 4: 5: return; 6: 7: #The following lines will not execute 8: print("Line 3 inside the method TestReturnExit()"); 9: print("Line 4 inside the method TestReturnExit()"); 10: 11: TestReturnExit(); 12: print("Hello World!");
Line 1 inside the method TestReturnExit() Line 2 inside the method TestReturnExit() Hello World!
در برنامه بالا نحوه خروج از تابع با استفاده از کلمه کلیدی return و نادیده گرفتن همه کدهای بعد از این کلمه کلیدی نشان داده شده است. در کد بالا انتظار ما این است که با فراخوانی تابع در خط 11، همه کدهای بدنه تابع (9-2) اجرا شوند. ولی با فراخوانی تابع خطوط 2 و 3 چاپ می شوند، چون هنگامی که برنامه به خط 5 می رسد، از بدنه تابع خارج می شود. سپس مفسر به خط 12 رفته و رشته Hello World را چاپ می کند.
بسیار عالی است. ولی چرا در این دستورات از “;” استفاده کردید؟ و اینکه در اولین تعربف باید بعد از پارانتز ” : ” بزاری که فراموش شده
بسیار ممنون بابت دقت و نظرتون
بنده در واقع سی شارپ کار کردم و علامت ; را طبق عادت گذاشتم.