مقدار برگشتی از یک متد
متدها میتوانند مقدار برگشتی از هر نوع دادهای داشته باشند. این مقادیر میتوانند در محاسبات یا به دست آوردن یک داده مورد استفاده قرار بگیرند. در زندگی روزمره فرض کنید که کارمند شما یک متد است و شما او را صدا میزنید و از او میخواهید که کار یک سند را به پایان برساند. سپس از او میخواهید که بعد از اتمام کارش سند را به شما تحویل دهد. سند همان مقدار برگشتی متد است. نکته مهم در مورد یک متد، مقدار برگشتی و نحوه استفاده شما از آن است. برگشت یک مقدار از یک متد آسان است. کافیست در تعریف متد به روش زیر عمل کنید :
returnType MethodName() { return value; }
returnType در اینجا نوع دادهای مقدار برگشتی را مشخص میکند (int،bool،…). در داخل بدنه متد کلمه کلیدی return و بعد از آن یک مقدار یا عبارتی که نتیجه آن یک مقدار است را مینویسیم. نوع این مقدار برگشتی باید از انواع ساده بوده و در هنگام نامگذاری متد و قبل از نام متد ذکر شود. اگر متد ما مقدار برگشتی نداشته باشد باید از کلمه void قبل از نام متد استفاده کنیم. مثال زیر یک متد که دارای مقدار برگشتی است را نشان میدهد.
1: using System; 2: 3: public class Program 4: { 5: static int CalculateSum() 6: { 7: int firstNumber = 10; 8: int secondNumber = 5; 9: 10: int sum = firstNumber + secondNumber; 11: 12: return sum; 13: } 14: 15: public static void Main() 16: { 17: int result = CalculateSum(); 18: 19: Console.WriteLine("Sum is {0}.", result); 20: } 21: }
Sum is 15.
همانطور که در خط 5 مثال فوق مشاهده میکنید هنگام تعریف متد از کلمه int به جای void استفاده کردهایم که نشان دهنده آن است که متد ما دارای مقدار برگشتی از نوع اعداد صحیح است. در خطوط 7 و 8 دو متغیر تعریف و مقدار دهی شدهاند.
توجه کنید که این متغیرها، متغیرهای محلی هستند. و این بدان معنی است که این متغیرها در سایر متدها مانند متد Main قابل دسترسی نیستند و فقط در متدی که در آن تعریف شدهاند قابل استفاده هستند. در خط 10 جمع دو متغیر در متغیر sum قرار میگیرد. در خط 12 مقدار برگشتی sum توسط دستور return فراخوانی میشود. در داخل متد Main یک متغیربه نام result در خط 17 تعریف میکنیم و متد CalculateSum() را فراخوانی میکنیم.
متد CalculateSum() مقدار 15 را بر میگرداند که در داخل متغیر result ذخیره میشود. در خط 19 مقدار ذخیره شده در متغیر result چاپ میشود. متدی که در این مثال ذکر شد متد کاربردی و مفیدی نیست. با وجودیکه کدهای زیادی در متد بالا نوشته شده ولی همیشه مقدار برگشتی 15 است، در حالیکه میتوانستیم به راحتی یک متغیر تعریف کرده و مقدار 15 را به آن اختصاص دهیم. این متد در صورتی کارامد است که پارامترهایی به آن اضافه شود که در درسهای آینده توضیح خواهیم داد. هنگامی که میخواهیم در داخل یک متد از دستور if یا switch استفاده کنیم باید تمام کدها دارای مقدار برگشتی باشند. برای درک بهتر این مطلب به مثال زیر توجه کنید :
1: using System; 2: 3: public class Program 4: { 5: static int GetNumber() 6: { 7: int number; 8: 9: Console.Write("Enter a number greater than 10: "); 10: number = Convert.ToInt32(Console.ReadLine()); 11: 12: if (number > 10) 13: { 14: return number; 15: } 16: else 17: { 18: return 0; 19: } 20: } 21: 22: public static void Main() 23: { 24: int result = GetNumber(); 25: 26: Console.WriteLine("Result = {0}.", result); 27: } 28: }
Enter a number greater than 10: 11 Result = 11
Enter a number greater than 10: 9 Result = 0
در خطوط 5-20 یک متد با نام GetNumber() تعریف شده است که از کاربر یک عدد بزرگتر از 10 را میخواهد. اگر عدد وارد شده توسط کاربر درست نباشد متد مقدار صفر را بر میگرداند. و اگر قسمت else دستور ifو یا دستور return را از آن حذف کنیم در هنگام اجرای برنامه با پیغام خطا مواجه میشویم.
چون اگر شرط دستور if نادرست باشد (کاربر مقداری کمتر از 10 را وارد کند) برنامه به قسمت else میرود تا مقدار صفر را بر گرداند و چون قسمت else حذف شده است برنامه با خطا مواجه میشود و همچنین اگر دستور return حذف شود چون برنامه نیاز به مقدار برگشتی دارد پیغام خطا میدهد. و آخرین مطلبی که در این درس میخواهیم به شما آموزش دهیم این است که شما میتوانید از یک متد که مقدار برگشتی ندارد خارج شوید. حتی اگر از نوع دادهای void در یک متد استفاده میکنید باز هم میتوانید کلمه کلیدی return را در آن به کار ببرید. استفاده از return باعث خروج از بدنه متد و اجرای کدهای بعد از آن میشود.
1: using System; 2: 3: public class Program 4: { 5: static void TestReturnExit() 6: { 7: Console.WriteLine("Line 1 inside the method TestReturnExit()"); 8: Console.WriteLine("Line 2 inside the method TestReturnExit()"); 9: 10: return; 11: 12: //The following lines will not execute 13: Console.WriteLine("Line 3 inside the method TestReturnExit()"); 14: Console.WriteLine("Line 4 inside the method TestReturnExit()"); 15: } 16: 17: public static void Main() 18: { 19: TestReturnExit(); 20: Console.WriteLine("Hello World!"); 21: } 22: }
Line 1 inside the method TestReturnExit() Line 2 inside the method TestReturnExit() Hello World!
در برنامه بالا نحوه خروج از متد با استفاده از کلمه کلیدی return و نادیده گرفتن همه کدهای بعد از این کلمه کلیدی نشان داده شده است. در پایان برنامه متد تعریف شده (TestReturnExit()) در داخل متد Main() فراخوانی و اجرا میشود.
سلام..
واقعا ممنون بابت وبسایت خوبتون!
( متد ()CalculateSum مقدار 158 برمی گرداند که در داخل متغییر result ذخیره می شود)می خواستم بپرسم که عدد158 اشتباه تایپی است؟ و اگر نه، چطوری به این نتیجه رسیدیم؟
سلام، لطف دارین، بله اشتباه تایپی بوده، اصلاح کردم
آقای ابراهیمی آفرین
آفرین که واقعا عالی نوشتی دیدگاه من به سی شارپ 360 درجه عوض شد چقدر تمیز و عالی آموزش دادین آفرین.
مرسی، نظر لطفتونه
آقا چرا بخش کار با فایل ندارید؟؟
بقیه قسمت های سایت رو هم ببینید. کار با فایل ها هم تو لینک زیره:
http://www.w3-farsi.com/category/c-net/netframework
اقاييييي رامييييين جمع كن برو كلاااااااااااااااااا كيفيت سايت انقد بالا هست كه ما با كلي امكانات خارج از سايت بازم ميايم اينجا مشكلامونو حل ميكنيم
دلتون خوشه، این همه سایت فارسی و انگلیسی که مطالبشون رو رایگان در اختیار گذاشتن حالا شما چند تا مطلب گذاشتید میخواید هزینه دریافت کنید؟؟؟ خیلی خنده دار هستید، حالا پیش خودتون فکر کردید عجب ایده ای به سرتون زده ، خخخخخخخخخخ
با اجازه از آقاي ابراهيمي ، جناب رامين شما از “اين همه سايت فارسي و انگليسي” استفاده كنيد، كسي شما رو مجبور به استفاده از مطالب سايت نكرده.
اگر شما تمام مطالب رو با اين زبان ساده كه در اينجا توضيح داده شده در سايت هاي ديگه ميتونيد يادبگيريد پس خوشا به حالتون و استفاده كنيد.و اميدوارم موفق باشيد.
واقعا عالی دست شما درد نکنه
mer30 kheili khob bod .
خواهش می کنم دوست عزیز،لطف دارین