"OK, låt oss prova ett annat tillvägagångssätt. Jag ska visa dig hur anropsmetoder fungerar, och sedan försöker du gå igenom föregående lektion igen, OK?"

"Vi gör det."

"Bra. Jag ska berätta om anropsfunktioner/metoder och de värden de returnerar (returvärden)."

"Kommandon, eller satser, är grupperade i metoder så att de kan köras som ett enda block, som ett enda komplext kommando. För att göra detta måste du skriva metodens (funktions) namn och sedan lista metodens argument inom parentes."

Exempel
package com.codegym.lesson2;
public class MethodCall
{
    public static void main(String[] args)
    {
         print4("I like to move it, move it.");
    }

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

"I exemplet ovan skrev vi en funktion som kommer att visa den passerade strängen på skärmen fyra gånger. Sedan anropade vi funktionen print4på rad 6."

"När programmet når rad 6, hoppar det till rad 9 och tilldelar värdet 'I like to move it, move it'till variabeln s."

"Då kommer raderna 11-14 att exekveras. Funktionen avslutas och programmet kommer att återupptas på rad 7."

"Jag förstår."

"Du kan inte bara skicka argument (värden) till en funktion – en funktion kan returnera resultatet av sitt arbete (returvärde). Detta görs med nyckelordet retur. Så här ser det ut:"

Exempel 1.
Bestäm minimum av två tal.
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int m = min(a, b);
      System.out.println("The minimum is "+ m);
   }

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

      return m2;
   }
}
Så här fungerar det:
public class MethodCall
{
   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("The minimum is "+ m);
   }
}

"Jag tycker att det börjar bli vettigt! Koden i vänster och höger kolumn är faktiskt densamma. Det är bara det att koden till vänster har en fristående funktion."

"Funktionen beräknar ett visst värde och använder return-satsen för att skicka det värdet till vad som än kallas det. Åtminstone är det så jag ser det."

"Och du har rätt!"

"Men vad är denna tomrumstyp?"

"Vissa funktioner gör bara något utan att beräkna eller returnera något värde, som vår main()- metod. En speciell returtyp – void – skapades för sådana funktioner."

"Varför inte bara deklarera ingenting om en funktion inte returnerar något?"

"Kommer du ihåg hur vi deklarerar en variabel? Typ och namn. För funktioner deklarerar vi en typ, ett namn och en parentes. Ett funktionsnamn följt av parentes är hur du kallar funktionen."

"Så det var lättare att uppfinna en "void-typ" än att dela in funktioner i två kategorier - de som returnerar värden och de som inte gör det?"

"Precis! Du är riktigt smart, min pojke."

"Hur returnerar vi en tomrumstyp?"

"Det gör vi inte. Det fungerar så här. När return-satsen körs beräknar Java-maskinen värdet på uttrycket till höger om ordet 'return', lagrar detta värde i en speciell del av minnet och avslutar omedelbart funktionen . Det lagrade värdet används där funktionen anropades, som ett resultat av anropet av funktionen. Du kan se det i exemplet jag gav tidigare."

"Du menar delen där int m = min(a, b) omvandlas till m = m2?"

"Ja. Efter att funktionen är klar fungerar allt som om funktionens returvärde skrevs på dess plats. Upprepa denna fras i ditt sinne och titta på koden i det sista exemplet. "

"Jag tycker att det här bara verkar lätt. Det är faktiskt svårt. Jag har bara förstått delar av det."

"Det är OK. På första försöket kan du bara förstå saker du redan vet. Ju fler saker du inte förstår, desto djupare kastar du dig in i något nytt, och desto bättre kommer dina resultat att bli. Det kommer att bli tydligare med tiden ."

"Tja, om du säger så. Låt oss fortsätta."