CodeGym /Kursy /Składnia Java /Wywoływanie metod, zwracanie wartości

Wywoływanie metod, zwracanie wartości

Składnia Java
Poziom 2 , Lekcja 7
Dostępny

– OK, spróbujmy innego podejścia. Pokażę Ci, jak działa wywoływanie metod, a następnie spróbujesz powtórzyć materiał z poprzedniej lekcji, OK?

– Zróbmy to.

– Świetnie. Opowiem Ci o wywoływaniu funkcji/metod i wartościach, jakie one zwracają (zwracaniu wartości).

– Komendy lub instrukcje są grupowane w metody, dzięki czemu można wykonywać je jako jeden blok, jak jedną złożoną komendę. Aby to zrobić, musisz napisać nazwę metody (funkcji), a następnie w nawiasach podać argumenty tej metody.

Przykład
package com.codegym.lesson2;
public class WywolanieMetody
{
    public static void main(String[] args)
    {
         print4("Wyginam śmiało ciało.");
    }

    public static void print4(String s)
    {
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
    }
}

– W powyższym przykładzie napisaliśmy funkcję, która wyświetli przekazany ciąg na ekranie cztery razy. Następnie wywołaliśmy funkcję print4 w linii 6.

– Gdy program dojdzie do linii 6, przeskoczy do linii 9, przypisując do zmiennej s wartość 'Wyginam śmiało ciało.'.

– Następnie wykonywane są linie 11-14. Funkcja kończy się i program zostaje wznowiony od linii 7.

– Rozumiem.

– Możesz nie tylko przekazywać do funkcji argumenty (wartości) — funkcja może też zwracać wynik swojej pracy (zwracana wartość). Odbywa się to za pomocą kluczowego słowa return. Wygląda to tak:

Przykład 1.
Wyznacz minimum z dwóch liczb.
public class WywolanieMetody
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int m = min(a, b);
      System.out.println("Minimum to "+ m);
   }

   public static int min(int c, int d)
   {
      int m2; if (c < d) m2 = c; else m2 = d;

      return m2;
   }
}
Oto, jak to działa:
public class WywolanieMetody
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int c = a, d = b;
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      int m = m2;
      System.out.println("Minimum to "+ m);
   }
}

– Myślę, że to zaczyna mieć sens! Kod w lewej i prawej kolumnie jest w rzeczywistości taki sam. Po prostu kod po lewej stronie korzysta z wydzielonej funkcji.

– Funkcja oblicza określoną wartość i używa instrukcji return, aby przekazać wartość do elementu, który ją wywołał. A przynajmniej tak to widzę.

– I masz rację!

– Ale czym jest typ void?

– Niektóre funkcje po prostu coś robią bez obliczania lub zwracania wartości, na przykład nasza metoda main(). Dla takich funkcji utworzono specjalny typ zwrotny – void.

– Dlaczego po prostu nie zadeklarujemy nic, skoro funkcja nic nie zwraca?

– Pamiętasz, jak deklarujemy zmienne? Typ i nazwa. W przypadku funkcji deklarujemy typ, nazwę i nawiasy. Nazwa funkcji, po której następują nawiasy, to sposób na wywołanie funkcji.

– Zatem łatwiej było wymyślić pusty 'typ void', zamiast dzielić funkcje na dwie kategorie – te, które zwracają wartości i te, które ich nie zwracają?

– Dokładnie! Jesteś naprawdę bystry, mój chłopcze.

– Jak zwracamy typ void?

– Nie robimy tego. Działa to w ten sposób: Podczas wykonywania instrukcji return maszyna Java oblicza wartość wyrażenia po prawej stronie słowa 'return', zachowuje tę wartość w specjalnym obszarze pamięci i natychmiast kończy funkcję. Zachowana wartość jest używana w miejscu wywołania funkcji jako wynik wywołania tej funkcji. Możesz zobaczyć to w przykładzie, który podałam wcześniej.

– Masz na myśli część, w której int m = min(a, b) jest przekształcane w m = m2?

– Tak. Po zakończeniu funkcji wszystko działa tak, jakby wartość zwrócona przez funkcję była napisana w miejscu wywołania funkcji. Powtórz to zdanie w głowie i spójrz na kod z ostatniego przykładu.

– Myślę, że to tylko wydaje się proste. W rzeczywistości to trudne. Zrozumiałem tylko część.

– W porządku. Przy pierwszej próbie możesz zrozumieć tylko to, co już znasz. Im mniej rozumiesz, tym bardziej zagłębiasz się w coś nowego i tym lepiej to rozumiesz. Z czasem stanie się to jasne.

– Cóż, skoro tak mówisz. Kontynuujmy.

Komentarze (9)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Maciej Czajka Poziom 7, Poland, Poland
11 marca 2024
Totalnie bezsensowne nic z tego nie rozumiem
Michał Poziom 5, Poland, Poland
3 grudnia 2023
Dlaczego wynik z metody min jest przypisywany do zmiennej m. ? Gdzie to jest zapisane? Ja to widze w taki sposób: są dwie metody - main z int m i metoda z int min. Obydwie mają swoje zmienne (a,b - main i c,d - int min). Wg mnie powinno to działać niezależenie od siebie - bo są dwie różne klasy (choć jedna main).
Dawid Poziom 10, Poland
21 września 2023
Ile razy to widzę cały czas nie mogę tego pojąć. Dla mnie to troszkę sprzeczne. Skoro tworzymy metodę void, która "nic nie zwraca" a w rzeczywistości wykonuję jakieś działania i zwraca wartość tego działania poprzez return to dlaczego się mówi, że nic nie zwraca skoro zwraca?
NiceHatMate Poziom 20, Poland, Poland
18 stycznia 2024
Sam sobie odpowiedziałeś na to pytanie, wykonuje jakieś działanie nie jest równoważne z tym że coś zwraca. Porównałbym to do działania matematycznego: Funkcja void może mieć jakieś działanie dajmy na to 2 + 2 < wykonuje działanie Funkcja zwyczajna z return 2 + 2 = 4 < wymusza znak równa się który musi zwrócić czwórkę
Aleksandra Poziom 11, Poland, Poland
19 lipca 2022
Mordecai, "print4" to nazwa metody, czyli funkcji. Przyjmuje ona argument s (w 9 linii kodu), a następnie wyświetla go 4 razy na ekranie za pomocą poleceń w liniach 11-14.
Tomek vel Tombatold Poziom 5, Piekary Śląskie , Poland
13 września 2022
ja sie ugryzlem w palce, jak zobaczylem kiedy to pisał :)
MordecaiXVIII Poziom 3, Łódź, Poland
27 stycznia 2022
Brakuje mi komentarzy w tych koda, np czym jest "print4". Albo pokazać gdzie to: "Aby to zrobić, musisz napisać nazwę metody (funkcji), a następnie w nawiasach podać argumenty tej metody" jest zrobione w kodzie. Łatwiej można b to zrozumieć. Druga sprawa to, po co pisać kod tak jak jest w pierwszym przykładzie (drugi kod) skoro w drugim jest krótszy i łatwiejszy do zrozumienia?
23 listopada 2020
Czy ktoś może mi wyjaśnić, dlaczego w przykładach powyżej oraz zadaniu nie występują nawiasy klamrowe {} przy instrukcjach sterujących if/else?
John Squirrels Poziom 40, San Francisco, Poland
24 listopada 2020
Panie Marcinie, w tym przypadku są one nie obowiązujace, bo mamy tylko jedną linię kodu.