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

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

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

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

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

 

برای بکارگیری توابع به سه جزء نیازمندیم: تعریف تابع، اعلان تابع، فراخوانی تابع

می توانید شکل کلی از تعریف یک متد (تابع) را به همراه اجزای آن، در زیر مشاهده می کنید:

هر بار که ما کدهای جاوا را در بخش های قبلی کامپایل می کردیم، تابع اصلی Main این کار را برای ما انجام می داد.

به بررسی متد main در جاوا می پردازیم. در زیر مشاهده می کنید که ابتدا یک کلمه ی کلیدی به نام public آورده شده است. این کلمه یک Modifier است که در بخش پانزدهم به آن پرداختیم. کلمه کلیدی public و باعث می شود که به این متود بتوان در کل برنامه دسترسی داشت.

public static void main(String[] args) {
// کدهای اصلی برنامه
}

سپس کلمه void آورده شده است که باعث می شود این متود چیزی را به عنوان بازگشتی ارسال نکند.

در ادامه متدهای دیگری معرفی می شود که می توانند هر نوع داده ای و حتی کلاس را به عنوان مقدار بازگشتی داشته باشند.

بعد از کلمه کلیدی Modifier ، نام متد آورده شده است. در اینجا نام متد main است.

سپس در داخل پرانتز، آرگومان ورودی این تابع ( یعنی String[] args ) آورده شده است.

برای تعریف بدنه اصلی یک تابع، کدهای برنامه را در داخل بلاک {} می نویسند.

نوع تابع (مثلا Void) ، نام تابع به همراه پرانتز و بلاک ، حداقل مواردی هستند که باید در کدهایمان برای تعریف یک تابع بنویسیم.

مثلا تابع زیر، شامل این حداقل موارد است:

void myMethod(){
        //بدنه تابع
}

گفته شد که هر متد می تواند مانند متغیر، انواع داده ای مختلف را برگرداند. در بالا Void معرفی شد. Void مقداری را به عنوان خروجی برنمیگرداند. ولی اگر متد ما، Void نباشد، پس حتما باید یک نوع داده ای را به عنوان خروجی برگرداند.

این نوع خروجی می تواند یک داده ی عددی صحیح (int) ، یک داده عددی اعشار (float ) ، یک رشته (String) و یا از نوع Boolean) Bool) و … باشد.

ولی حتما دقت داشته باشید که اگر متد شما Void نباشد، حتما باید از دستور return برای برگرداندن مقدار مورد نظر، استفاده کنید.

مثلا تابع زیر باعث ایجاد خطا می شود:

int myMethod(){
}

پس باید به شکل زیر اصلاح شود:

int myMethod(){
    return 0;
}

مشاهده می کنید که تابع بالا، عدد 0 را برای شما به صورت خروجی برمی گرداند.

حال اگر مقدار خروجی تابع شما از نوع رشته (String) باشد، باید در جایی از بدنه، باید کد return مقداری به صورت String برگرداند:

String myMethod(){
       return "Gsm";
}

می توان یک ساختمان داده (آرایه و…) و یا یک کلاس را نیز به عنوان خروجی تابع برگرداند.

مثلا متد زیر از نوع آرایه ی کاراکتری تعریف شده است که مقدار myChars را به صورت خروجی برمیگرداند:

char[] myMethod(){
       char[] myChars = {'A','B','C'};
       return myChars;
}

ارسال پارامتر به متد

قسمت بعدی که می خواهیم به آن بپردازیم، آرگومان های ورودی تابع است که در پرانتز نوشته می شوند. اگر بخواهید مقادیر و یا متغیرهایی را به تابع ارسال نمایید چه کار می کنید؟

یک راه اینست که متغیر را به صورت Public تعریف کنید و در داخل تابع، عملیات مورد نظر را بر روی آن انجام دهید. ولی هر تغییری بر روی این متغیر در هر جای تابع، مقدار این متغیر را به کل عوض می کند.

ولی ما نمیخواهیم این کار انجام شود.

مثال دیگری که به آن می پردازیم در ریاضی به آن برخورده اید.

اگر در ریاضی به یاد داشته باشید، تابع y=x+2 ، یعنی y بر حسب x تعریف می شود. پس اگر به عنوان مقدار ورودی به x ، عدد 3 را بدهیم، مقدار y برابر 5 می شود. عدد 3 در اینجا یک پارامتر و آرگومان ارسالی به این تابع است.

در واقع با استفاده از این آرگومان ها می توان پارامترهایی را به تابع ، ارسال نمود.

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

جایگاه این پارامترها در تعریف تابع کجاست؟

بار دیگر به این شکل نگاه کنید:

 

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

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

در واقع شبیه تعریف نمودن یک متغیر است با این تفاوت که پس از تعریف از ” ; ” در آخر هیچ کدام از متعیر ها و پارامترهای داخل پرانتز، استفاده نمی کنیم.

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

static float divide(float num1 , float num2){
        float z = num1 / num2;
        return z;
}

در کد بالا، در داخل پرانتز دو متغیر num1 و num2 از نوع float تعریف شده اند. سپس این تابع در داخل بدنه ی خود، بر روی این دو متغیر عمل تقسیم را انجام می دهد. ( پارامتر اول (num1) بر روی پارامتر دوم(num2) تقسیم می شود) .

سپس نتیجه به عنوان بازگشتی به تابع برگردانده می شود.

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

  • هر تغییری که در بدنه متد بر روی پارامتر انجام می دهیم در خارج از متد نیز آن تغییرات اعمال شوند
  • هر تغییر که در بدنه متد برروی پارامترها انجام می دهیم در خارج از متد آن تغییرات بی تاثیر می باشند.

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

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

Arash

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

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

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

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