Məzmuna keç
Educora
Başlanğıc16 dəq6 / 18

Metodlar

Kodu təkrar istifadə olunan metodlara böl: parametrlər, qaytarılan qiymət, void, static, yüklənmə və rekursiya.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Parametrləri və qaytarılan qiyməti olan static metod yazmaq və çağırmaq
  • Metodların yüklənməsindən (overloading) istifadə etmək
  • Java-da arqumentlərin qiymətə görə ötürülməsini izah etmək

Təsəvvür et ki, proqramın on yerində otağın sahəsini hesablamalısan. Eyni düsturu on dəfə yazsan, bir səhvi düzəltmək üçün on yeri dəyişməli olacaqsan. Metod adı olan kod blokudur: onu bir dəfə yazırsan və istədiyin qədər çağırırsan. Artıq bir metodu tanıyırsan — main-i.

Metodun quruluşu

Java
public class Main {
    static void greet(String name) {
        System.out.println("Hello, " + name + "!");
    }

    static double area(double width, double height) {
        return width * height;
    }

    static boolean isEven(int n) {
        return n % 2 == 0;
    }

    public static void main(String[] args) {
        greet("Aysel");
        greet("Murad");
        double room = area(4.5, 3);
        System.out.println("Room area: " + room);
        System.out.println(isEven(10) + " " + isEven(7));
    }
}
Gözlənilən nəticə
Hello, Aysel!
Hello, Murad!
Room area: 13.5
true false
  • static — metod sinfə aiddir və onu obyekt yaratmadan çağırmaq olar. Obyektlərin metodlarını növbəti modulda öyrənəcəksən.
  • Qaytarılan tip (void, double, boolean) metodun nə qaytardığını göstərir. void «heç nə qaytarmır» deməkdir.
  • Mötərizədəki parametrlər metodun giriş məlumatıdır; hər birinin tipi və adı var. Çağırışda verilən konkret qiymətlərə arqument deyilir.
  • return nəticəni çağırış yerinə qaytarır və metodu dərhal bitirir.

Diqqət et: area(4.5, 3) çağırışında 3 tam ədəddir, amma parametr double tiplidir — Java onu avtomatik 3.0-a genişləndirir. boolean qaytaran metodların adları adətən is və ya has ilə başlayır: isEven, hasTicket.

Yüklənmə və Math sinfi

Java-da eyni adlı bir neçə metod ola bilər — təki onların parametr siyahıları fərqli olsun (sayı və ya tipləri). Buna metodların yüklənməsi (overloading) deyilir. Kompilyator hansı variantı çağıracağını arqumentlərə baxaraq seçir. Təkcə qaytarılan tipin fərqli olması isə kifayət deyil.

Java
public class Main {
    static int max(int a, int b) {
        return a > b ? a : b;
    }

    static double max(double a, double b) {
        return a > b ? a : b;
    }

    static int max(int a, int b, int c) {
        return max(max(a, b), c);
    }

    public static void main(String[] args) {
        System.out.println(max(3, 9));
        System.out.println(max(2.5, 1.5));
        System.out.println(max(4, 11, 7));
        System.out.println(Math.max(5, 8) + " " + Math.sqrt(49) + " " + Math.pow(2, 10) + " " + Math.abs(-3));
    }
}
Gözlənilən nəticə
9
2.5
11
8 7.0 1024.0 3

Arqumentlər qiymətə görə ötürülür

Metod çağırılanda Java arqumentin surətini parametrə köçürür. Ona görə metodun içində int parametrini dəyişmək çağıran tərəfdəki dəyişənə təsir etmir. Massiv və obyektlərdə isə surəti çıxarılan şey obyektin özü deyil, ona istinaddır — belə istinadla metod eyni massivin elementlərini dəyişə bilir.

Java
public class Main {
    static void tryToChange(int x, int[] arr) {
        x = 100;
        arr[0] = 100;
    }

    public static void main(String[] args) {
        int number = 1;
        int[] numbers = {1, 2, 3};
        tryToChange(number, numbers);
        System.out.println(number);
        System.out.println(numbers[0]);
    }
}
Gözlənilən nəticə
1
100

Rekursiya və dəyişən sayda arqument

Metod özünü də çağıra bilər — buna rekursiya deyilir. Hər rekursiv metodun dayanma şərti olmalıdır, əks halda çağırışlar sonsuza qədər davam edər və proqram StackOverflowError ilə dayanar. int... values yazılışı isə metoda istənilən sayda arqument verməyə imkan yaradır; metodun içində onlar massiv kimi görünür.

Java
public class Main {
    static int factorial(int n) {
        if (n <= 1) {
            return 1;
        }
        return n * factorial(n - 1);
    }

    static int sum(int... values) {
        int total = 0;
        for (int v : values) {
            total += v;
        }
        return total;
    }

    public static void main(String[] args) {
        System.out.println(factorial(5));
        System.out.println(sum(1, 2, 3));
        System.out.println(sum(10, 20, 30, 40));
        System.out.println(sum());
    }
}
Gözlənilən nəticə
120
6
100
0
factorial(5) necə hesablanır?

Rekursiv factorial metodunun factorial(5) çağırışını addım-addım izlə.

Həllini göstər
factorial(5) = 5 · factorial(4)
factorial(4) = 4 · factorial(3)
factorial(3) = 3 · factorial(2)
factorial(2) = 2 · factorial(1)
factorial(1) = 1 — dayanma şərti.
İndi geri qayıdırıq: 2 · 1 = 2, 3 · 2 = 6, 4 · 6 = 24, 5 · 24 = 120.

Əsas fikirlər

  • Metod adı olan kod blokudur: bir dəfə yazılır, dəfələrlə çağırılır.
  • Başlıq qaytarılan tipi, adı və parametrləri göstərir; void heç nə qaytarmır, digər tiplər return tələb edir.
  • Yüklənmə: eyni adlı metodların parametr siyahıları fərqli olmalıdır.
  • Java arqumentləri qiymətə görə ötürür; massiv və obyektlərdə isə istinadın surəti ötürülür.
  • Rekursiv metodun mütləq dayanma şərti olmalıdır.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
void qaytarılan tipi nə deməkdir?