تهران - اسلامشهر

Tumblr

دپارتمان آموزش

آموزش جاوا - جلسه ششم - تابع

تابع در جاوا


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

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

foo یک متد است که در کلاس Main تعریف شده است. چیزهای زیادی را در مورد foo می توانید تعریف کنید

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

آرگومانها

همیشه می خواهم بگویم که آرگومان ها برای متدهای جاوا بر اساس مقدار انجام می شوند، اما برخی ممکن است با انتخاب کلمات من مخالف باشند، بنظر من بهترین راه برای توضیح و درک دقیق آن است.

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

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

در اینجا یک مکان دیگر در کد وجود دارد، جایی که bar فراخوانی می شود.

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

شما می توانید در ذهن خود تصور کنید زمانی که bar(a, b) در حال اجراست, این همانند دو خط ابتدای bar که در ادامه نوشته شده است:

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 صحیح است. این بدین معنی است که متدهای در حال اجرا روی s1 شی joe را تغییر خواهد داد. اما اگر ما بخواهیم مقدار s1 بعنوان یک منبع تغییر دهیم , هیچ تأثیری روی joe نخواهد گذاشت.

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

متدهای بدون Static

متدهای بدون Static در جاوا بیشتر از متدهای با Static استفاده می شوند. این متدها فقط در اشیا قابل استفاده هستند نه در سراسر کلاسها.

متد های بدون static می توانند زمینه ی شیء را دسترسی پیدا کنند و تغییر دهند.

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

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

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

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

خلاصه مطلب

  • هر متد جاوا در یک کلاس قرار دارد
  • متد های static به یک کلاس متعلق هستند، در حالی که متد های بدون static به اشیا تعلق دارند
  • همه پارامترها به توابع توسط مقدار منتقل می شوند، محتوای اولیه کپی می شود، در حالی که اشیاء کپی نمی شوند و بعضی می گویند: "انتقال با منابع"

تمرین

متدی با نام printFullName بنویسید که نام کامل یک دانش آموز را نمایش دهد.


 203,    14  خرداد  1397 ,   آموزش جاوا

نظر دادن

ما را دنبال کنید

خبرنامه تکتا

راه های ارتباطی

تلفن تماس: 09353184127 - 09112936370

پست الکترونیک : info@taktagroup.ir