Jeff Mosawy
- مقدمه
تا کنون یک آشنایی مختصری با متدها (Methods) پیدا کردید و میدانید که تقریباً مزیتهای یک متد چیست؛ مثلاً بجای اینکه چندین بار تابع اضافه کردن به یک لیست خاصی را بنویسیم، آن را یک بار توسط یک متد تعریف میکنیم و میتوانیم هرچند باری که بخواهیم از آن استفاده کنیم.
در این بخش، با موضوع پاس دادن مقدارهای معینی به متد آشنا خواهیم شد. شما هنگامی که یک متد (یا همان تابع) را وقتی که بنویسید، میتوانید مقدارهای معینی را به تابع پاس دهید تا عملیات خاصی رو آن انجام دهید.
همچنین میتوانیم مقادیر خاصی را که در تابع بدست آمده، توسط دستوری آن را برگردانیم
- پاس دادن مقادیر خاصی به متد؛ برگرداندن مقدار معین
هنگامی که شما متد جدیدی را در کدهای خود تعریف میکنید، میتوانید مقادیری را به تابع تحویل دهید تا روی آن پردازشاتی انجام دهد. کاری که ما میخواهیم انجام دهیم این است که دو مقدار را به عنوان ورودی به تابع دهیم تا آنها را با هم جمع بزند.
باید بدین شکل عمل کنیم که عددهایی که در Text Box ها وارد میشوند را دریافت کرده؛ در متغیرهایی ذخیره کرده، به تابع پاس دهیم و عملیات جمع را در داخل تابع انجام دهد و در نهایت مقدار مورد نیاز خودمان را «برگرداند.»
به مقادیری که به متدها پاس داده میشود، اصطلاحاً آرگومانهای یک متد میگویند. برای تعریف آرگومانهایی به تعداد مورد نیاز به شکل زیر عمل میکنیم (تعریف دو آرگومان؛ یعنی دو مقدار را میخواهیم به متد پاس دهیم):
void AddUp(int Num1, int Num2)
{
…
}
آیا به مقادیری که در داخل پرانتزها در هنگام تعریف تابع اختصاص دادهایم دقت میکنیم؟ اینها آرگومانهای تابع هستند. به تعداد مورد نیاز آنها را توسط یک کاما (,) جدا کرده و فراموش نشود که نوع هر کدام از آرگومانها قبل از نام متغیر آنها نوشته شود. مثلاً ما میتوانستیم که به شکل زیر تابع را تعریف کنیم:
void AddUp(float Num1, float Num2)
{
…
}
دقت کنید که نامهایی که برای متغیرهای Num1 و Num2 در نظر گرفتهایم یک متغیرهای موقتی هستند. در هنگام استفاده از این تابع نیز باید به این مورد دقت داشته باشیم که هر نوعی که در هنگام تعریف تابع برای آرگومانها در نظر گرفتیم، میبایست که در هنگام پاس دادن مقادیر به این تابع، از همان نوع استفاده کنیم. (int به int – Float به Float و …)
حال متد خودتان را که قبلاً با نام AddUp تعریف کرده بودید را به شکل زیر تغییر دهید:

همانطور که میبینید، ما در اینجا دو آرگومان برای این تابع تعریف کردهایم؛ FirstNumber و secondNumber. اینها همان مقادیری “خواهند بود” که بعداً به متد پاس میدهیم و روی آنها پردازش انجام میدهد. حال نوبت به انجام پرداش میرسید؛ کدهای این متد را به شکل زیر بروزرسانی کنید:

در واقع ما اینجا کاری که کردیم بدین شکل بود؛ یک متغیر در داخل متد تعریف کردیم با نام answer که حاصل جمع دو عدد را به ما در انتها که کار متد AddUp به اتمام میرسد را به ما برگرداند. فعلاً چونکه تابع ما از نوع void هست، هیچ مقداری را بر نمیگرداند؛ بلکه ما الان با استفاده از MessageBox در حال نمایش مقدار answer هستیم؛ و نه برگرداندن مقدار آن!
اگر که به کدهای اصلی مربوط به button1 برگردیم، میبینید که:

اگر به این error دقت کنید به را به شما میگوید که: «هیچ تعریفی برای این تابع صورت نگرفته است که هیچ آرگومانی را نگیرد.»
حالا چرا این خطا را به ما نشان میدهد؟ ما در تعریف تابع خود دو آرگومان در نظر گرفتیم (آرگومانهایی با نامهای firstNumber و secondNumber) ولی در اینجا ما در بین جفت پرانتزها هیچ مقداری به تابع پاس ندادهایم؛ لذا این خطا را از ما میگیرد.
کدهای خود را به شکل زیر تغییر دهید:

حال کدهای ما بهشکل صحیحی نوشته شدهاند. به عکس زیر دقت کنید تا منظور را بهتر متوجه شوید:

حال شما میتوانید حتی کدهای داخل button1 را نیز به شکل زیر تغییر دهید که در واقع در حال دریافت مقادیر از Textbox ها میباشیم:

یا میتوانید آنها را در متغیرهایی ذخیره کرده و سپس از آنها استفاده کنید:

دقت کنید که هیچ لازم نیست اسامی متغیرهای آرگومانهای ما با نام متغیرهایی که به متد در حال پاس دادن هستیم یکی باشد!
حال نوبت به برگرداندن مقدار از تابع میرسد. متدهایی که تا الان تعریف کردیم، دارای یک کلمهکلیدیای به نام void بودند؛ void یعنی خالی و اصطلاحاً به متدهایی میگویند که هیچ مقداری را برنمیگرداند. اگر میخواهید که تابع شما مقداری را برگرداند، می بایست که بهجای void، نوع مقداری را که میخواهید برگرداند را بنویسید؛ مثلاً int.
یک متد جدید طبق تصویر زیر با نام Subtract تعریف کنید:

اگر کمی کدهای خودمان را مرتبتر کنیم، به شکل زیر خواهند بود:

پیش آنها کدها را شرح دهیم، بر روی کلید مربوط به Subtract دابل-کلیک کنید تا وارد کدهای مربوط به آن شوید؛ کدهای زیر را به آن اضافه کنید:

ما کدهای مربوط به این بخش از کلید را در مرحله بعد توضیح میدهیم؛ فعلاً فقط برنامه را اجرا کنید؛ امیدوارم که نتیجه جواب نمایش داده شده درست باشد …
خوب؛ نگاهی به متد جدیدمان بیندازیم:
private int Subtract(int firstNumber, int secondNumber)
آرگومانهای داخل پرانتز دقیقاً شبیه به متدهای قبل بود و دقیقاً به همان شکل عمل میکند؛ دو مقدار را بعنوان آرگومان از کدها میگیرد. چیزی که در این بخش جدید است، قسمت زیر میباشد:
private int Subtract
کلمه Subtract که تنها نام تابع است، اما قبل از خود نام تابع، دو کلمه کلیدی مهمی داریم؛ int و private. کلمه کلیدی private را برای حال فراموش کنید، در آینده به این موضوع خواهیم پرداخت، اما در رابطه با int، ما از آن بجای کلمه void استفاده کردیم، در واقع بجای اینکه هیچ مقداری را برنگرداند، بلکه یک مقداری را که از نوع int میباشد را برگردانیم.
مجدداً به کدهای زیر نگاه کنید:

به خط آخر دقت کنید:
return answer;
نوع answer چیست؟ int! پس باید نوعی مقداری که در حال برگرداندن هستیم با کلمه کلیدی قبل از نام تابع یکی باشد! این دقیقاً مقداری میباشد که تابع آن را برگردانده است! (یعنی خواهد برگرداند)
خوب، اما از این return کجا استفاده کردیم؟ کد زیر را ببینید:
private void button2_Click(object sender, EventArgs e)
{
int number1;
int number2;
int returnValue=0;
number1 = int.Parse(textBox1.Text);
number2 = int.Parse(textBox2.Text);
returnValue = Subtract(number1, number2);
messageBox.Show(returnValue.ToString());
}
در واقع بدین اتفاقات بدین شکل در حال انجام شدن هستند؛ مقداری را که تابع Subtract برمیگرداند باید در جایی ذخیره شد، لذا متغیری با هم از همان نوع (در اینجا int) ساخته شود تا جواب مربوط به مقدار برگرداندن متد در آن ذخیره شد.
جهت دریافت نسخه PDF این بخش آموزشی، اینجا را کلیک کنید.
