در نوشتههای قبلی چند بار از مِتدهایی مثل Start و Update استفاده کردیم و گفتم که کاربردهاشون چیه ولی اینکه خود متد چیه و چه کاربردهایی در یونیتی داره رو قراره اینجا بگم.
مِتد که یه کلمهی انگلیسیه و میشه Method بعضی وقتها هم بهش میگن فانکشن Function ولی اینکه چی صداش کنن فرقی در کارش نمیکنه. در زبان سی شارپ متد یک بلوکه که داخلش یک یا چند خط کد مینویسند و تا وقتی صداش نکنند کاری نمیکنه و ساکت یه گوشه میشینه و منتظر میمونه. چون ممکنه یه زمانی صداش کنن پس حتما باید یه اسم داشته باشه که بفهمه که اونو دارن صدا میکنن. هر متدی یه کار مشخص انجام میده پس با متدهای دیگه فرق داره. مثل این میمونه که در یک کارخونه چند تا رُبات داریم که یه گوشهای نشستن و با صدا فعال میشن همین که یکی شون رو صدا میکنیم پا میشه میره و یه کاری که براش تعریف شده رو انجام میده و برمیگرده سرجاش.
یه متد یک بار تعریف میشه ولی میشه بارهای بار در جاهای مختلف از استفاده کرد. فرض کنید چند خط کد دارید که کارشون اینه که مشخص کنن کاربر در محیط بازی چه رنگی انتخاب کرده و اون رنگ رو بیارن و نسبت بدن به مدلی که کاربر انتخاب میکنه اگه بخوام باز سادهترش کنم مثلا در محیط بازی میخواید سوار یه ماشین بشید و هر بار رنگ ماشین رو خودتون انتخاب کنید. شما رنگ رو انتخاب میکنید و در محیط بازی رنگ ماشین به رنگ انتخابی شما تغییر میکنه. حالا اگه بدون استفاده از متد این کار رو بخواید انجام بدید اون چند خط رو جاهایی که کاربر میتونه رنگ رو انتخاب کنه باید کپی کنید. اگه برای انجام این تغییر رنگ سه خط کد داشته باشید و بخواد در ده موقعیت متفاوت در بازی رنگ تعیین کنید در کل باید سی خط کد رو کپی کنید. مهمتر اینکه اگه بعدن لازم بشه این کدها رو اصلاح کنید تغییری توشون بدید دیگه کار خیلی سخت میشه. اینجاست که متد وارد میشود. شما سه خط کد رو داخل یه متد قرار میدید و فقط اسم متد رو هر جا لازمه اضافه میکنید:
این یه متده ()
{
چه رنگی رو کاربر انتخاب کرده
رنگ اصلی ماشین رو به رنگ انتخابی کاربر تغییر بده
ببین کاربر گواهینامه داره 🙂
}
این رو میشه گفت مهمترین ویژگی متده یعنی جلوگیری از تکرار که در ضمن کمک میکنه بشه راحت کدها رو ویرایش کرد. یه ویژگی دیگهی متد اینه که میتونیم جوری تعریفش کنیم بعد از اینکه کدهای داخلش اجرا شد مقداری رو بگردونه یا نه کلا فقط کاری که قراره انجام بده رو انجام بده یعنی کدهای داخلش رو اجرا کنه ولی هیچ مقداری رو برنگردونه. اگه قدیمها رو یادتون باشه یا شنیده باشید یکی آشی یا چیزی میپخت و با یه کاسه میفرستاد برای همسایهش یا فامیلش اون هم یا آش رو با جاش بر میداشت یا یه چیزی میزاشت داخل کاسه به عنوان تشکر و پس میفرستاد. حالا اگر اول متد یه void بزاریم میشه همونی که قرار نیست چیزی رو پس بفرسته. ولی اگه قرار باشه مقداری رو برگردونه باید نوعش رو مشخص کنیم که اون مقدار از نوع عدد صحیحه، اعشاریه و غیره و در ضمن باید داخل اون متد از کلمهی return استفاده کنیم که بهش کلمهی کلیدی یا keyword میگن. کاربردش هم اینه که بعضی وقتها لازمه یه متد بنویسید که یه چیزی رو محاسبه کنه و نتیجهش رو یه جای دیگه استفاده کنید.
این متد چیزی رو برنمیگردونه
void MyMethodTest()
{
// Change the color of the car in the first stage of the game
// and
// The last line of three-line code
}
این متد یه مقداری از نوع عدد صحیح رو برمیگردونه. حتما باید نوعی که برمیگردونه با نوعی که ابتدای متد تعریف کردید یکی باشه وگرنه خطا CS0029 میده
int MyMethodTest()
{
int firstValue = 1;
int secondValue = 2;
return firstValue + secondValue;
}
یه موضوع دیگه دسترسی به متده که مهمه. اگه بخوایم به یه متد دسترسی کامل داشته باشیم اول خطی که داریم متد رو تعریف میکنیم کلمهی کلیدی public رو قرار میدیم. حالا اگه بخوایم داخل یونیتی اون رو به یه دکمه نسبت بدیم قابل دسترسه برای مثال خط ۱۱ رو در این نوشته ببینید. در زیر دو متد نمونه که دسترسی بهشون public ﻪ تعریف شده:
public void MyMethodTestA()
{
}
public string MyMethodTestB()
{
return
}
ولی اگه بخوایم متد تنها داخل کلاسی که متد رو داخلش نوشتیم قابل دسترس باشه و همونجا هر کاری که لازمه انجام بده رو انجام بده از کلمهی کلیدی private استفاده میکنیم. با این کار دیگه از داخل محیط یونیتی و یا از کلاس دیگهای نمیشه به این متد دسترسی داشت.
اگه هم دسترسی رو تعیین نکنید یعنی public یا private رو جلوی اسم متد ننویسید به صورت پیشفرض متد شما private تعریف میشه. دو نمونه متد زیر هیچ فرقی با هم ندارن و هر دو private هستن:
void MyMethodTest()
{
}
private void MyMethodTest()
{
}
کلا هم به اینها میگن Access Modifiers و غیر از public و private چهارتای دیگه هم هستند ولی مهمتریناشون همین دو تان.
ولی متد قرار نیست همیشه به سادگی بالا باشه و مواردی هست که لازمه اطلاعاتی رو به متد منتقل کنیم که متد در انجام کاری ازشون استفاده کنه. بزودی این نوشته رو با توضیح درباره پارامترها و آرگومنتها در متد بروز رسانی میکنم.