CyberStars

Return Values

În lecția despre metode, am văzut că o metodă poate returna o valoare în loc să doar afișeze. Hai să aprofundăm valorile returnate: sunt una dintre cele mai puternice unelte din trusa ta Java

Gândește-te la o metodă cu valoare returnată ca la un automat de vânzări. Pui ceva în el (parametrii), mașina își face treaba și îți dă ceva înapoi (valoarea returnată). O metodă void este ca un difuzor: face ceva (redă un sunet), dar nu îți dă nimic în mână

public class Main {
    public static int patrat(int n) {
        return n * n;
    }

    public static void main(String[] args) {
        int rezultat = patrat(5);
        System.out.println(rezultat);   // 25
    }
}

Afișează 25

Tipul returnat int dinaintea numelui metodei îi spune lui Java: „această metodă va da înapoi un int". În interiorul metodei, return trimite acea valoare înapoi celui care a apelat-o


Putem returna orice tip, nu doar int. Iată câteva exemple

public class Main {
    public static String saluta(String nume) {
        return "Bun venit in Vice City, " + nume;
    }

    public static double jumatate(double n) {
        return n / 2.0;
    }

    public static boolean esteVIP(String nume) {
        return nume.equals("Tommy Vercetti");
    }

    public static void main(String[] args) {
        System.out.println(saluta("Lance Vance"));
        System.out.println(jumatate(100));
        System.out.println(esteVIP("Tommy Vercetti"));
        System.out.println(esteVIP("Phil Cassidy"));
    }
}

Afișează

Bun venit in Vice City, Lance Vance
50.0
true
false

Fiecare metodă își declară tipul returnat chiar înaintea numelui: String, double, boolean. Tipul trebuie să corespundă cu ce returnezi de fapt. Java nu te va lăsa să returnezi un String dintr-o metodă care promite un int


Lucrul tare la valorile returnate este că le poți folosi în expresii, exact ca pe orice altă valoare

public class Main {
    public static int aduna(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        // foloseste valoarea returnata direct intr-un calcul
        int total = aduna(10, 20) + aduna(5, 5);
        System.out.println(total);   // 40

        // foloseste-o direct in println
        System.out.println(aduna(100, 200));   // 300

        // foloseste-o intr-o conditie
        if (aduna(2, 3) > 4) {
            System.out.println("Da, 5 > 4");
        }
    }
}

Afișează

40
300
Da, 5 > 4

Te poți gândi la un apel de metodă precum aduna(10, 20) ca fiind înlocuit cu valoarea sa returnată. Așa că aduna(10, 20) + aduna(5, 5) devine 30 + 10, adică 40


O greșeală frecventă: să încerci să faci return într-o metodă void sau să uiți să faci return într-o metodă care nu este void

public class Main {
    // eroare: o metoda void nu poate returna o valoare
    public static void faceTreaba() {
        return 42;   // nu se va compila
    }

    // eroare: metoda promite int, dar nu are return
    public static int getNumar() {
        int x = 42;
        // am uitat sa facem return x
    }
}

Java le prinde pe amândouă la compilare, înainte ca programul să ruleze măcar


void vs return: când le folosești pe fiecare?

  • Folosește void când metoda doar face ceva (afișează, modifică date etc.)
  • Folosește un tip returnat când metoda calculează ceva și ai nevoie de rezultat

Tommy nu doar duce la capăt misiuni, el aduce înapoi banii. Asta este o valoare returnată. Dacă doar provoacă haos fără nicio răsplată, asta este void


Misiune: Creșterea Imperiului

Imperiul lui Tommy crește pe zi ce trece. Stocul pornește de la 1, iar în fiecare zi se înmulțește cu un factor fix. Vrei o metodă care îți spune cât ai după un anumit număr de zile.

Scrie o metodă care primește factorul și numărul de zile și întoarce stocul de la final. Calculează-l cu o buclă: pornește de la 1, apoi înmulțește cu factorul de un număr de ori egal cu zilele. Dacă au trecut 0 zile, bucla nu rulează deloc și rămâi cu 1. Apoi, în main, stochează factorul într-o variabilă numită factor și numărul de zile într-o variabilă numită zile, apelează metoda și afișează rezultatul.

Exemplu

Pentru factor 2 pe 3 zile (2 × 2 × 2), programul tău ar trebui să afișeze

8