نحوه ی ساخت یک متد در زبان برنامه نویسی جاوا


در این قسمت قصد داریم تا متدها را به طور دقیق تر مورد بررسی قرار دهیم. همانطور که قبلاً هم گفته شده هر آبجکت در زبان برنامه نویسی جاوا دارای یکسری Attribute و Behavior می باشد. به طور مثال، اگر آبجکت ما داری یک متغیر از جنس int است که مقداری را در خود ذخیره می سازد، این متغیر به منزله یک Attribute برای آبجکت ما محسوب می شود. از سوی دیگر Behavior ها بخشی از یک کلاس را تشکیل می دهند که قرار است کاری را انجام دهد که هر یک از این بخش ها یک Method نامیده می شود. تا این بخش از آموزش ما بارها و بارها متدهایی را به صورت ناخودآگاه مورد استفاده قرار داده ایم که یکی از این متدها ()print می باشد که این وظیفه را دارا است تا هر آنچه را که مابین دو پرانتزش قرار گرفت را در کنسول به نمایش در آورد.

نحوه ساخت یک متد تا حدودی شبیه به ساخت یک کلاس است. هر دو می توانند Modifier هایی مثل public, private و غیره بگیرند، هر دو می بایست با یک علامت } شروع شده و با یک علامت { تکمیل گردند. متد وظیفه ای که بر عهده دارد این است که می بایست پس از آن که فرا خوانده شد داده یا مقداری را بازگرداند (البته لزوماً این طور نیست، شاید در حد انجام کاری یا عملیاتی باشد و چیزی برنگرداند و اصطلاحا void باشد.) در ضمن توجه داشته باشیم که این مقدار می تواند مقدار یک متغیر ساده مثل int و یا double باشد و یا می تواند آبجکتی از یک کلاس باشد.

برای درک بهتر متدها، یک پروژه جدید تحت عنوان Method ساخته و یک کلاس به نام MainClass به معنی "کلاس اصلی" در آن ایجاد می کنیم. کد ما در ابتدای کار می بایست به این شکل باشد:

public class MainClass {

}

اکنون دو متغیر یکی از جنس int تحت عنوان price به معنی "قیمت" با مقدار اولیه ی 3000000 ایجاد کرده و یک آبجکت از روی کلاس String تحت عنوان laptopName به معنی "نام لپ تاپ" با مقدار اولیه The Laptop Name Is Lenovo. به معنی "نام لپ تاپ لنوو هست." ایجاد می کنیم. کد تکمیل شده ما می بایست به شکل زیر است:

public class MainClass {
    int price = 3000000;
    String laptopName = "Laptop Name Is Lenovo";
}

در ادامه متدی ایجاد می کنیم که وظیفه خواهد داشت این داده ها را در پنجره ی کنسول نمایش دهد. کد تکمیل شده به شکل زیر خواهد بود:

public class MainClass {
    int price = 3000000;
    String laptopName = "Laptop Name Is Lenovo";
    public void showData() {
        System.out.println(laptopName + " and its price is " + price);
    }
}

در واقع هر متد از دو بخش تشکیل شده است، بخش Signature و بخش Body که در مثال فوق Signature با کلید واژه public شروع شده است به این معنی که این متد از هر کجای برنامه ما قابل دسترسی خواهد بود. سپس کلید واژه ی void مشاهده می شود که به این معنا است که هر موقع متد showData در برنامه فرا خوانده شد، این متد قرار نیست هیچ چیزی به طور مثال داده ای را اصطلاحاً return کند یا بازگرداند و صرفا وظیفه دارد هر آنچه را مابین دو علامت { } قرار گرفته است را مثلاً روی مانیتور نمایش دهد.

سپس به نام متد می رسیم که در مثال فوق نام showData به معنی "داده ها را نشان بده" می باشد (همان طور که در قسمت های پیشین توضیح داده شد، نحوه نام گذاری متدها به این شکل است که کلمه اول در نام متد می بایست یک فعل باشد و علت این مسئله هم این است که از آنجا که متدها وظیفه دارند کاری انجام دهند، پس بهتر است در نامگذاری این دقت شود که نام متد هم با کاری که قرار است انجام دهد یکی باشد.)

سپس دو پرانتز به شکل () مقابل نام متد قرار می دهیم که وظیفه این پرانتز ها این است که اگر خواستیم پارامترهایی را برای متد خود در نظر بگریم داخل این دو پرانتز بنویسیم. در واقع ما با این کار می توانیم زمانی که متد را فرا می خوانیم داده هایی را از هر جنس در لحظه به متد خود منتقل نماییم. در این مثال ما قصد نداریم تا هیچ داده ای را به این شکل در حین فرا خواندن متد خود منتقل نماییم پس پرانتزها خالی باقی خواهند ماند (در آموزش بعد نمونه ای از متدی را توضیح خواهیم داد که داخل پرانتز مقابل نام متد داده ای را قرار داده تا در حین فرا خواندن آن متد، آن داده هم منتقل شود.)

حال نوبت به بررسی Body متد خود می رسد. در حقیقت همان طور که در کد فوق ملاحظه می شود Body متد ما تحت عنوان showData حاوی یک دستور ;()System.out.println برای نمایش دادن چیزی در پنجره ی کنسول است. نکته ای که در اینجا حائز اهمیت است این است که در این دستور ما به متغیرهایی که قبلاً ایجاد کرده بودیم لینک داده ایم.

تا این مرحله از کدنویسی، ما موفق شده ایم تا یک متد که قرار است جمله ای را در پنجره ی کنسول به نمایش درآورد را ایجاد کنیم. حال می بایست این متد را فرا بخوانیم، برای این منظور یک کلاس جدید تحت عنوان ActionClass به معنی "کلاس عملیاتی" ایجاد کرده و از آنجا که این کلاس جدید قرار است به منزله ی نقطه شروع برنامه باشد پس نیاز داریم تا در حین ساخت آن گزینه public static void main را تیک بزنیم. کد ما می بایست به صورت زیر باشد:

public class ActionClass {
    public static void main(String[] args) {
    }
}

در متد main در کلاس جدیدی که ایجاد کردیم یک آبجکت از روی کلاس قبلی به صورت زیر می سازیم:

public class ActionClass {
    public static void main(String[] args) {
        MainClass myObject = new MainClass();
    }
}

در کد فوق ما نام کلاسی که می خواهیم از روی آن یک آبجکت ایجاد کنیم را نوشته سپس نامی برای آن انتخاب کرده که در این مثال نام myObject به معنی "شیء من" در نظر گرفته شده است. سپس یک علامت مساوی قرار داده و مجدداً نام کلاسی که می خواهیم آبجکت از روی آن ساخته شود را می نویسیم و در نهایت یک علامت ;() قرار می دهیم. آبجکت ما ساخته شد. حال می خواهیم متدی که در کلاسی که از روی آن یک آبجکت ساختیم را فرا بخوانیم. برای این منظور کد خود را به شکل زیر تکمیل می کنیم:

public class ActionClass {
    public static void main(String[] args) {
        MainClass myObject = new MainClass();
        myObject.showData();
    }
}

همان طور که مشاهده می شود، نام آبجکتی که جدیداً ساخته را نوشته سپس یک نقطه قرار داده و نام متدی که در کلاس اصلی خود ساخته بودیم را می نویسیم و در نهایت علامت ;() را در انتهای نام متد قرار می دهیم. اکنون می توانیم برنامه را اجرا می کنیم:

می بینیم که برنامه ی ما پس از اجرا، متدی را فرا خواند که وظیفه داشت عبارت فوق را در پنجره ی کنسول به نمایش در آورد.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
اقای مرادی باید بگم شما فوق العاده هستید اولا که اموزش ها رو رایگان قرار دادید ثانیا به قدری خوب و واضح و سلیس و حرفه ای مطالب رو جا میندازید که بنده طی مدت طولانی که از اموزش های مختلف استفاده میکردم قادر به درک بسیاری موارد نبودم اما شما عالی توضیح دادید و من بسیاری از مفاهیم رو از شما یاد گرفتم... ولی از شما خواهش میکنم بازم ادامه بدید و مطالب رو در سطح پیشرفته تر هم ادامه بدید...
بهزاد مرادی
بهزاد مرادی مدرس، کپی‌رایتر و دولوپر
سلام
نظر لطف شماست

در پاسخ به

عبدالحمید ارجمند
عبدالحمید ارجمندAndroid Developer - Java - عاشق گجتهای اپل و مایکــ
بنظرم این آموزشها ، آماده ی چاپ هستند تا اینکه در یک برهه ی زمانی بسیار کوتاه به محبوبیت ملی برسند .

در پاسخ به

کاربر میهمان
کاربر میهمان
mainclass غلطه !!! actionclass باید باشه ! گویا خیلی با عجله نوشتید ... بازم ممنون بابت آموزش هاتون :)
shirin hosseini
shirin hosseini
کاملا درسته چون ما باید از روی کلاس قبلی یعنی mainclass یک آبجکت بسازیم پس باید اسم کلاس قبلی رو بنویسیم

در پاسخ به

کاربر میهمان
کاربر میهمان
کد نوشتن متد و خراخوانی ان هردو از خط یک شروع شدن پس موقع فراخوانی جه طور برنامه متد را فراخوانی میکند؟
کاربر میهمان
کاربر میهمان
سلام
ممنون از آموزشهای خوبتون
تو جاوا مثل سی++ نمیشه به آرگومانهای تابع مقدار پیش فرض داد؟؟؟؟چرا؟؟؟دلیل خاصی داره؟؟؟؟؟؟
کاربر میهمان
کاربر میهمان
سلام, برنامه ای که سه ضلع از مثلثی رو بگیره و بگه ایا قائم الزاویه هست یا نه.
کاربر میهمان
کاربر میهمان
عایییییییییییییییییییییییییییییییییییییییییییییییییییییییییی
امیرحسین مختاری
امیرحسین مختاری
چه جوری یه کد نویسی که قبلا یه جای دیگه ای نوشتیم رو تو یه کدنویسی دیگه میاریم نتیجش رو
میشه یه کم ساده تر توضیح بدید؟