– 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.