CodeGym /Kursy /JAVA 25 SELF /Wartości zwracane, return

Wartości zwracane, return

JAVA 25 SELF
Poziom 8, Lekcja 3
Dostępny

1. Wprowadzenie

Zacznijmy od pytania: po co w ogóle metoda ma coś zwracać? Dlaczego nie można po prostu wszystko zrobić w środku metody, a wynik wypisać na ekran?

Chodzi o to, że często potrzebujemy nie tylko wykonać jakieś działanie, ale też otrzymać wynik, który później przyda się w innych częściach programu. Na przykład:

  • Metoda oblicza sumę dwóch liczb i zwraca ją, abyśmy mogli wykorzystać wynik w dalszych obliczeniach.
  • Metoda określa, czy liczba jest parzysta, i zwraca true albo false, abyśmy mogli podjąć decyzję.
  • Metoda zwraca łańcuch powitalny dla użytkownika, a my decydujemy, gdzie go przekazać – wypisać na ekran, zapisać do pliku, wysłać po sieci.

Gdyby metody zawsze tylko drukowały wynik, nasz program byłby na sztywno związany z jednym scenariuszem i trudno byłoby ponownie używać logiki. Wartość zwracana czyni metody elastycznymi i uniwersalnymi.

Analogia

Wyobraź sobie automat do kawy. Wrzucasz pieniądze, naciskasz przycisk – i dostajesz kawę. Gdyby automat tylko głośno mówił „Kawa zrobiona!” (ale nie wydawał kawy), raczej byś się nie ucieszył. Tak samo z metodami: czasem nie chodzi o to, by usłyszeć „Gotowe!”, lecz by otrzymać wynik.

2. Typ wartości zwracanej: co może zwracać metoda

W Java, kiedy deklarujesz metodę, podajesz typ wartości zwracanej – może to być dowolny typ: int, double, String, boolean, tablica, a nawet obiekt własnej klasy. Jeśli metoda nic nie zwraca – piszemy void.

Składnia:

return_type_value methodName(parameters)
{
    // ciało metody
}
Sygnatura metody

Przykłady:

int sum(int a, int b) 
{
    // zwraca int
}

String getGreeting(String name) 
{
    // zwraca String
}

boolean isEven(int number) 
{
    // zwraca boolean
}

void printHello() 
{
    // nic nie zwraca — po prostu wykonuje działanie
}

Ważne! Typ wartości zwracanej to „obietnica” metody: ma obowiązek zwrócić wartość tego typu. Jeśli obiecałeś zwrócić int, a zwracasz String – kompilator zaprotestuje i nie pozwoli zbudować programu.

3. Operator return: jak zwrócić wartość z metody

Aby faktycznie przekazać wynik działania metody „na zewnątrz”, używa się operatora return. To słowo mówi: „Oto wynik – i na tym moja praca się kończy”.

int sum(int a, int b) 
{
    int result = a + b;
    return result; // zwracamy wynik
}
Zwracanie wartości przez return

Można też krócej:

int sum(int a, int b) 
{
    return a + b;
}

Kiedy metoda dochodzi do wiersza return, kończy wykonywanie, zwraca wskazaną wartość i przekazuje ją tam, skąd została wywołana.

Ważne: typ wartości po return musi być zgodny z zadeklarowanym typem metody.

4. Użycie wartości zwracanej: co z nią zrobić?

Kiedy metoda zwraca wartość, możesz:

  • Zapisać ją do zmiennej.
  • Użyć bezpośrednio w wyrażeniu.
  • Przekazać innej metodzie.
int result = sum(5, 7); // zapisujemy do zmiennej
System.out.println(result); // wypisujemy wynik

System.out.println(sum(10, 20)); // od razu wypisujemy wynik

if (isEven(42)) 
{
    System.out.println("Liczba parzysta!");
}

Przykład: metoda zwracająca łańcuch

String getGreeting(String name) 
{
    return "Cześć, " + name + "!";
}

// Użycie:
String greeting = getGreeting("Alicja");
System.out.println(greeting); // Cześć, Alicja!

5. Praktyka: przykłady metod z wartością zwracaną

Metoda zwracająca maksimum z dwóch liczb

int max(int a, int b) 
{
    if (a > b) 
    {
        return a;
    } 
    else 
    {
        return b;
    }
}

Można jeszcze krócej, jeśli znasz operator trójargumentowy:

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

Użycie:

int maximum = max(10, 25);
System.out.println("Maksimum: " + maximum); // Maksimum: 25

Metoda, która zwraca true, jeśli liczba jest parzysta

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

Użycie:

if (isEven(18)) 
{
    System.out.println("Liczba parzysta!");
} 
else 
{
    System.out.println("Liczba nieparzysta!");
}

Metoda zwracająca sumę elementów tablicy

int sumArray(int[] arr) 
{
    int sum = 0;
    for (int i = 0; i < arr.length; i++) 
    {
        sum += arr[i];
    }
    return sum;
}

Użycie:

int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("Suma ocen: " + total);

6. Co się dzieje przy wywołaniu metody z return

Gdy wywołujesz metodę zwracającą wartość, wykonanie programu jakby „wchodzi” do środka metody, wykonuje jej kod, dochodzi do return, zwraca wartość – i podstawia ją w miejscu wywołania.

Schematycznie:

int a = 2;
int b = 3;
int c = sum(a, b); // tutaj wywoływane jest sum(2, 3), zwracane jest 5, c staje się równe 5

Schemat blokowy

        graph TD
        A["main"] --> B["sum(a, b)"]
        B --> C[obliczenia]
        C --> D[return result]
        D -->|wynik zostaje zwrócony| A
    

7. Przydatne niuanse

return kończy wykonywanie metody

Gdy tylko w metodzie pojawia się return, wykonywanie metody natychmiast się przerywa. Wszystko, co jest dalej – nie zostanie wykonane.

int test()
{
    return 42;
    System.out.println("To nie zostanie wydrukowane"); // unreachable
}

return w metodzie o typie void

W metodzie void (która nic nie zwraca) można użyć return bez wartości – tylko po to, by przedwcześnie zakończyć wykonywanie metody, np. przy jakimś warunku.

void printPositive(int number)
{
    if (number <= 0) 
    {
        System.out.println("Liczba nie jest dodatnia!");
        return; // po prostu wychodzimy z metody
    }
    System.out.println("Liczba: " + number);
}

8. Typowe błędy przy pracy z return

Błąd nr 1: Nie wszystkie ścieżki zwracają wartość

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    }
    // A jeśli number <= 0? Brak return!
}
// Błąd: nie wszystkie gałęzie kodu zwracają wartość

Jak naprawić: zawsze zapewniaj return na wszystkich ścieżkach wykonania.

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    } 
    else if (number < 0) 
    {
        return -1;
    } 
    else 
    {
        return 0;
    }
}

Błąd nr 2: Niezgodność typu wartości zwracanej

int getNumber()
{
    return "42"; // Błąd! Oczekiwano int, a nie String
}

Błąd nr 3: return po return

int test()
{
    return 5;
    System.out.println("To się nie wykona"); // unreachable statement
}

Błąd nr 4: return z wyrażeniem w metodzie void

void printSomething()
{
    return 42; // Błąd! Metoda void nie może zwracać wartości
}

Błąd nr 5: Ignorowanie wartości zwracanej

sum(10, 20); // i co? Wynik przepadł!

Jeśli nie używasz wartości zwracanej, po prostu się ona traci. Nie zapominaj zapisać jej lub przekazać dalej w kodzie!

Błąd nr 6: Oczekiwanie, że return coś wydrukuje

int result = sum(2, 3);
// return niczego nie drukuje!
// Trzeba wyraźnie wypisać:
System.out.println(result);
1
Zadanie
JAVA 25 SELF, poziom 8, lekcja 3
Niedostępne
Inteligentny asystent do spersonalizowanych powitań 🤖
Inteligentny asystent do spersonalizowanych powitań 🤖
1
Zadanie
JAVA 25 SELF, poziom 8, lekcja 3
Niedostępne
Detektor parzystości dla quizu edukacyjnego ❓
Detektor parzystości dla quizu edukacyjnego ❓
1
Zadanie
JAVA 25 SELF, poziom 8, lekcja 3
Niedostępne
Wybór zwycięzcy w zawodach punktowych 🏆
Wybór zwycięzcy w zawodach punktowych 🏆
1
Zadanie
JAVA 25 SELF, poziom 8, lekcja 3
Niedostępne
Obliczanie łącznej liczby punktów ze wszystkich testów ucznia 📚
Obliczanie łącznej liczby punktów ze wszystkich testów ucznia 📚
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION