آموزش برنامه نویسی جاوا

آموزش برنامه نویسی جاوا (بخش هفدهم: کار با متدها در جاوا)

در بخش قبل با متدها در زبان برنامه نویسی جاوا ، آشنا شدیم. همچنین در مورد اجزای متدها و کمی در مورد نحوه عملکرد آن ها توضیح داده شد.

در این بخش با فراخوانی متدها در توابع مختلف آشنا خواهیم شد.

فراخوانی متدها

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

برای فراخوانی یک متد، دو راه وجود دارد:

1- زمانی که متد هیچ مقداری را بر نمی گرداند: در این نوع صدا زدن کافی ست، اسم متد را در تابع اصلی یا هر تابع دیگری که می خواهیم، بنویسیم. سپس در داخل پرانتز لیست آرگومان های ورودی آن متد را در صورت وجود بنویسیم. سپس در آخر از علامت “;” استفاده می کنیم.

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

به عنوان مثالی از این نوع فراخوانی، کد زیر را مشاهده نمایید:

public class JavaApplication1 {

    public static void main(String[] args) {
        ShowMessage(); // فرخوانی متد
    }
    // تعریف متد
    static void ShowMessage(){
        System.out.print(("Gsm Developers")); // چاپ خروجی
    } 
}

در کد بالا وقتی تابع main اجرا می شود، به سراغ متد و کدهای بدنه ی ShowMessage می رود. در بدنه ی متد ShowMessage نیز، رشته ی “Gsm Developers” چاپ می شود. پس خروجی کد بالا نیز Gsm Developers است.

2- زمانی که متد، مقداری را بر می گرداند: در این نوع صدا زدن، نمی توان فقط با نوشتن اسم متد، آن را صدا زد. زیرا متد مقداری را بر می گرداند و از آن مقدار باید در جایی استفاده شود. مثلا ذخیره شود و یا به عنوان خروجی چاپ شود و …

به عنوان مثال، کد زیر متدی را صدا می زند که مقدار برگشتی دارد:

public class JavaApplication1 {

    public static void main(String[] args) {
        float m = divide(5,6); // m فراخوانی تابع و ریختن مقدار برگشتی آن در متغیر
        System.out.print(m); // m چاپ متغیر 
    }
    //تابع تقسیم
    static float divide(float num1 , float num2){
        float z = num1 / num2;
        return z; // مقدار برگشتی
    }
}

در کد بالا ، بعد از آن که تابع main اجرا شد، به سراغ متد divide می رود. سپس بعد از اجرای کدهای متد divide ، مقدار خروجی متد divide به متغیر m ریخته می شود.

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

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

overload کردن متدها

در جاوا همان طور که دیدید، با استفاده از اسم یک متد می توان آن را فراخوانی نمود. اسم متد، همان اسمی است که در هنگام ساخت برای آن تعریف کردیم.

ولی آیا نمی توان با همین اسم، متدی با بدنه و ساختاری دیگر تعریف کرد؟

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

مثلا بخواهیم متد مورد نظر ما، یک بار بدون پارامتر فراخوانی شود و یک بار با پارامتر String و یک بار با پارامتر int. ولی ما فقط یک پارامتر می خواهیم به آن متد ارسال نماییم ، نه بیشتر.

تعریف دو متد با نام یکسان و نوع خروجی و متغیر های یکسان باعث خطا می شود.

به این گونه تعریف متد ها با نام یکسان ولی پارامترهای متفاوت overload کردن متدها یا method overloading گفته می شود.

به عنوان مثال، به کد زیر خوب دقت کنید:

public class JavaApplication1 {

    public static void main(String[] args) {
        ShowMessage(); // تابع اول
        ShowMessage("Gsm Developers 2"); // تابع دوم

    }
    // تابع اول
    static void ShowMessage(){
        System.out.print(("Gsm Developers 1\n"));
    }
    // تابع دوم
    static void ShowMessage(String message){
        System.out.print(message);
    }
}

خروجی کد بالا به صورت زیر است:

Gsm Developers 1

Gsm Developers 2

اولین ShowMessage ی که در کد بالا در تابع اصلی main فراخوانی شد، بدون پارامتر است. پس تابع اولی که مشاهده می کنید، فراخوانی می شود.

ولی تابع دومی که در main فراخوانی می کنیم، بدنه ی تابع دومی که متغیر message به عنوان پارامتر ارسالی، تعریف شده است، فراخوانی می شود.

Arash

طراح سایت و برنامه نویس

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا