EN

Search
Close this search box.

موستانگ، وحشیِ دوست داشتنی

توابع

یک تابع (function) یا متد (method) ، یک بلوک از کد است که تنها زمانی اجرا می شود که فراخوانی گردد. هر تابع، برای انجام یک کار خاص استفاده می شود و می توان داده نیز به آن ارسال کرد که در اینصورت به این داده پارامتر می گویند. شاید برایتان سوال پیش بیاید که چرا باید از تابع استفاده کنیم؟ زیرا از این طریق می توان یک بار یک کد را نوشت و سپس بارها از آن استفاده کرد. در ادامه با موستانگ همراه باشید تا قواعد تعریف و استفاده از توابع  در جاوا را با هم بیاموزیم.

توابع و پارامتر ها در جاوا - موستانگ
توابع و پارامتر ها در جاوا – موستانگ

 

 

توابع در جاوا

در جاوا تمامی تعاریف توابع باید داخل کلاس باشد. مثال زیر، یک تعریف از یک تابع بنام foo است:

public class Main {
    public static void foo() {
        // Do something here
    }
}

foo تابعی است که در کلاس Main آن را تعریف کردیم. به نکات زیر در مورد این تابع توجه کنید:

  • static : بدین معناست که این تابع متعلق به خود کلاس است و نه شیئ ای خاص از این کلاس. بدین معنا که اگر بخواهیم آن را از کلاسی دیگر فراخوانی کنیم، باید به این صورت باشد: ()Main.foo
  • void : بدین معناست که این تابع مقداری را بر نمی گرداند. توابع در جاوا می توانند یک مقدار را برگردانند و این باید در تعریف تابع مشخص شود. اگرچه می توانید تنها از کلمه return برای خروج از تابع استفاده کنید.
  • این تابع هیچ پارامتر ورودی ندارد، اما واضح است که توابع جاوا، همچنان که در ادامه مشاهده خواهید کرد، می توانند پارامتر ورودی داشته باشند.

 

پارامتر ها

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

public void bar(int num1, int num2) {
    ...
}

و این قسمتی از کد است که تابع bar در آن فراخوانی می شود:

int a = 3;
int b = 5;
bar(a, b);

این طور تصور کنید که وقتی تابع bar(a, b) اجرا می شود، در ابتدای تابع دو خط زیر نوشته می شود:

int num1 = a;
int num2 = b;

و بعد از آن، باقی تابع اجرا می شود.

این بدین معنی است که مقدار a  در num1  و مقدار b  در num2 کپی می شود. تغییر مقدار  num1  و num2 هیچ تاثیری در مقادیر a  و b ندارد.

اگر پارامترها شیئ باشند، قانون همچنان همان است، اما با اندکی تغییر. به عنوان مثال:

public void bar2(Student s1, Student s2) {
    ...
}

و به صورت زیر از آن استفاده می کنیم:

Student joe = new Student("joe");
Student jack = new Student("jack");
bar2(joe, jack);

دوباره می توانیم همان دو خط را در آغاز تابع bar2 تصور کنیم:

Student s1 = joe;
Student s2 = jack;

اما وقتی شیئ ها را مقداردهی می کنیم با زمانی که تایپ های اولیه را مقداردهی می کنیم تفاوت دارد.

در اینجا s1 و joe در واقع دو اشاره گر متفاوت به یک شیئ هستند (عبارت s1 == joe درست (true) است). این بدین معنا است که اگر تابعی را بر رویs1 فراخوانی کنیم، شیئ joe تغییر می کند (زیرا هر دو به یک شیء اشاره می کنند). اما اگر بیاییم و مقدار s1 را به عنوان یک اشاره گر تغییر دهیم، اشاره گر joe تغییر نمی کند (زیرا s1 اکنون به یک شیئ دیگر اشاره می کند).

s1.setName("Chuck");           // joe name is now Chuck as well
s1 = new Student("Norris");    // s1 is a new student, different than joe with the name of Norris
// s1 == joe   is not true anymore

 

تفاوت پارامتر بصورت مقدار و پارامتر بصورت اشاره گر

درک تفاوت پارامتر بصورت مقدار و پارامتر بصورت اشاره گر بسیار مهم است و در درس مربوط به اشیاء در جاوا، بطور کامل این مفهوم برایتان واضح خواهد شد. اما اکنون این را تصوّر کنید که a و b یک مقدار عددی را در خود ذخیره می کنند، ولی jack و joe یک آدرس را درون خود نگاه می دارند و این آدرس به یک شیء اشاره می کند. با این توضیح و مشاهده عکس زیر، اگر قسمت مربوط به پارامتر ها را دوباره مطالعه فرمایید، برایتان ملموس تر خواهد شد.

توابع و پارامتر ها در جاوا - موستانگ
توابع و پارامتر ها در جاوا – موستانگ

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

 

توابع غیر static

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

توابع غیر static می توانند مقادیر متغیرهای یک شیئ را تغییر دهند و به آن ها دسترسی داشته باشند:

public class Student {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

در مثال بالا، تابع های getName و setName غیر static هستند. فراخوانی این توابع نیازمند ساختن شیئی از کلاس Student است. (همان طور که بعداً توضیح داده خواهد شد، با استفاده از دستور new می توان از یک کلاس شیء ساخت)

Student s = new Student();
s.setName("Danielle");
String name = s.getName();

Student.setName("Bob"); // Will not work!
Student.getName(); // Will not work!

 

خلاصه

  • هر تابعی از جاوا باید درون یک کلاس باشد.
  • توابع Static به کلاس و توابع غیر Static به اشیا تعلق دارند.
  • اگر پارامترهای تابع تایپ های اولیه باشند، مقدارشان کپی می شود (passed by value) و اگر شیئ باشند، کپی نشده و به اصطلاح به صورت اشاره گر منتقل می شوند (passed by reference).

 

در نهایت

[*] در این درس، با توابع در جاوا آشنا شدید و با مثال های مختلف مشاهده کردید که چطور می توان یک تابع را تعریف و سپس آن را فراخوانی نمود. با موستانگ در درس بعدی همراه باشید تا شما را با یکی از مهمترین مفاهیم در زبان های برنامه نویسی شیء گرا یعنی اشیا آشنا کند.

[*] اگر هر گونه سوال و یا ابهامی در این درس برایتان پیش آمده، می توانید در پایین این نوشته و در قسمت دیدگاه ها آن را ثبت کرده و با موستانگ به اشتراک بگذارید. همچنین پیشنهاد می کنیم که برای تمرین کد نویسی، حتماً سری به مانِژ بزنید.

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

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