Metoder i Java: kraftfullt verktyg för att återanvända och strukturera koden


Nyckelord: metoder, void, anropa metod, inparameter, top-down programmering

Det här kapitlet kommer gå igenom metoder (engelska: methods) i Java som är ett sätt att återanvända och strukturera vår kod. Kapitlet om metoder kommer visa varför vi bör använda metoder och har man faktiskt går tillväga för att skapa och använda dom. Kapitlet avslutas med ett längre exempel som visar hur vi kan använda oss av flera olika metoder då vi bygger upp våra program.

Metoder i Java

Vid programmering är det vanligt att man vill återanvända sin kod flera gånger och strukturera den i flera delar. Till vår hjälp för att göra det har vi metoder. Genom att skapa flera små metoder i Java, kan dessa användas för att sammankopplas till stora program.

Detta kapitel innehåller följande artiklar där vi först ska lära oss vad en metod i Java faktiskt är för någonting, för att sedan gå vidare och skapa och anropa en rad olika metoder med ett längre exempel där vi kopplar samman flera olika metoder och bygger ihop ett program. Avslutningsvis så kommer vi även titta närmare på vad som menas med rekursiva metoder och vad det innebär att en metod anropar en annan metod.

Sidor

Vad är en metod i Java?

En metod i Java utför ett kodblock, med andra ord, en sekvens av operationer, varje gång man använder metoden. Att använda en metod kallas att man anropar metoden, och det som blir resultatet av det anropet kallas för det som metoden returnerar. Metoder i Java är ett användbart och kraftfullt verktyg eftersom metoder är helt oberoende av annan kan kod och kan anropas från flera olika klasser.

Du kan tänka dig en metod som en svart låda. Först skickar du in ett eller flera värden i lådan och får sedan tillbaka ett annat, men du behöver inte veta vad som faktiskt händer i lådan. Med andra ord, du behöver inte veta hur koden är programmerad som genererar output av input. Det viktiga är att du vet vad som händer när man anropar metoden. Detta abstraherar programmet och skapar ett mer kompakt program.

Metod Java Metoder

Figur 1: En metod i Java illustrerad som en svart låda

Varför använda en metod i Java?

En stor fördel med metoder i Java är att du inte behöver skriva samma kod flera gånger. Du kan istället anropa en metod. Metoder är ett kraftfullt verktyg eftersom de är helt oberoende av annan kod. En metod kan dessutom anropa en annan metod. Användningsområdena för en metod i Java är många och de hjälper till att strukturera upp och förenkla programmen vi skapar.

En metod i Java:

  • Metoder utför ett block av operationer när den blir kallad på, vilket innebär att istället för att skriva samma kod flera gånger om, kan vi istället återanvända kod och köra den flera gånger, på olika ställen i programmet.
  • En metod kan få in ett eller flera värden, så kallade inparametrar, och kan även skicka tillbaka, returnera ett eller inget värde.
  • Med returnera menar man det som metoden “ger tillbaka” då den har utfört de operationer den innehåller. Metoden avslutar alltid när ett värde har returneras.

En metod i Java utför en sekvens, ett block av operationer när man anropar på den.

Hur fungerar en metod i Java?

En metod i Java kan fungera på ett par olika sätt. Dels så kan man välja om metoden ska ta in information, med andra ord, om metoden ska ta någon input. Men också vad som ska komma ut från metoden, helt enkelt, vad ska metoden returnera och vad blir resultatet när vi använder metoden, Generellt sett kan man säga att vi behöver ange två saker när vi skapar metoden:

  1. Antal inparametrar. Det kan allt från ingen inparameter till flera olika inparametrar.
  2. Vad metoden ska returnera: Liknande som för inparametrarna, vi kan välja att metoden ska returnera ett värde, eller att den helt enkelt inte returnerar någonting alls.

Om vi ritar upp de olika varianterna av en metod i Java så får vi,


Figur 2: Olika varianter av metoder

När ska jag använda metoder i Java?

  • Återanvändbar kod: Om du behöver göra samma sak (eller nästan samma sak) många gånger om, skriv en metod för att göra det och använd sedan den metoden varje gång du ska utföra den uppgiften.
  • Top-down programmering: Ett mycket användbart tillvägagångssätt inom programmering kallas för top-down programmering. Du löser ett stort problem, det som ses som “toppen”, genom att bryta ned det i mindre problem. För att göra detta i ett program, skriver du en metod för att lösa ditt stora problem genom att skapa andra metoder för att lösa de mindre delarna av problemet. Och dessa metoder för att lösa de enklare problemen kräver på liknande sätt andra metoder tills du kommer ner till enkla metoder som löser enkla problem.
  • Visualisera problemet: Skapa metoder för att göra något som är en åtgärd i din mentala bild av problemet. Detta kommer att göra det mycket lättare för dig att arbeta med dina program.
  • Förenkla: Ibland behöver vi inte veta hur en metod fungerar, utan vi är bara intresserade av vad den gör. Det gör att, som tidigare nämnt, att vi kan fokusera på huvudproblemet och kan fokusera på vad våra metoder faktiskt gör, snarare än hur dom gör det.

Hur skapar man en metod i Java?

Som vi såg i stycket ovan så finns det flera olika varianter av metoder, därför finns det ingen entydig syntax för hur man skapar en metod. Vi kommer

Syntax: Deklarera en metod i Java

Om vi skriver ett generellt syntax för en metod i Java så går vi igenom det steg för steg nedan sen.

public static retur_datatyp namn(input_datatyp namnA, input_datatyp namnB, ...) {

    // Här skrivs det som ska hända i metoden

    return variabel_retur;  // Metoden avslutas med return 
}

Vi kollar sen på metodens “huvud”

Syntax: Inparametrar till metod i Java

  • public static – är den så kallade modifieraren, den avgör synligheten för metoden. Vi förklarar skillnaden mellan static och non-static längre ned.
  • retur_datatyp – specificerar vilken datatyp som metoden ska returnera. Det kan till exempel vara en int, double eller string. Om ingen datatyp ska returneras anger man det reserverade ordet void. Det går att returnera alla av de datatyperna som vi har sett i tidigare kapitel.
  • namn – är namnet på metoden. Alla metoder måste ha ett namn och praxis är att namnet alltid skrivs med liten bokstav.
  • (input_datatyp namnA, input_datatyp namnB, .. ) – innanför parentesen anger man inparametrarna till metoden. Helt enkelt, vad är det man vill skicka in som information till metoden. Varje inparameter specificeras med datatyp och namn för att sedan separeras med ett kommatecken. Det går att ange hur många inparametrar som helst till en metod. Däremot, om man lämnar parentesen tom, skickar man inte in något värde till metoden.

Syntax: Använda return från en metod i Java

Ovan såg vi hur vi arbetar med metodens “huvud” och de inparametrar som metoden ska ha. Om vi istället riktar fokus mot vad metoden ska returnera och tittar närmare två nyckelord.

  • void — en metod som har void specificerad kommer inte att returnerar ett värde. Som vi såg innan, när vi inte vill att vår metod ska returnera något så specificera vi det i metodens “huvud”.
  • return — alla metoder (förutom de som specificeras med void), måste returnera ett värde. Det är return som anger vad vi skickar ut ur metoden. I koden vi skrev ovan så returnerar vi värdet variabel_return. Viktigt att notera att det som vi vill returnera måste vara detsamma som den datatyp som är specificerad när vi skapade metoden. Med andra ord, i koden vi skrev ovan så måste vi returnera en datatyp av det vi benämnde som retur_datatyp. Till exempel, om retur_datatyp skulle vara datatypen int så kan vi inte returnera en string, även om det skulle vara så att vi har både en int och en string som inparametrar.
  • En metod slutar alltid direkt efter att return har utförts. Det är alltså alltid det sista som händer.

Skillnad mellan static och non-static metod i Java

Vad menas egentligen med static (statisk) och non-static (icke-statisk) metoder i Java? Låt oss försöka reda ut ett par skillnader mellan dem.

  • En av de stora skillnaderna mellan en static och en non-static metod är att en static metod tillhör en klass medan en non-static metod tillhör instansen. Detta betyder att du kan anropa en static metod utan att skapa någon instans av klassen. Det låter säkert otydligt nu och vi kommer se mer om klasser och instanser längre fram.
  • En tumregel som man kan använda: “är det vettigt att anropa den här metoden, även om inget objekt har instantiserats ännu?” I så fall bör det definitivt vara en static metod.
  • Vidare, en till viktig skillnad mellan static och non-static metoder är att du inte kan använda en non-static metodvariabel i en static metod, du kan inte ens anropa en Non-static metod från den en Static metoden. Däremot, motsatsen fungerar, till exempel. du kan anropa en static metod från en non-static metod i Java.
  • Avslutningsvis, static konceptet upplevs i princip alltid med viss otydlighet av Java-programmerare, särskilt i början. Men var inte orolig det kommer bli tydligare ju mer vi lär oss om klasser och objekt.

Det känns säkerligen rätt otydligt vad skillnaderna mellan static och non-static är, det kommer bli tydligare längre fram när vi lär oss om klasser och objekt. Vi kommer i våra exempel framöver bara att använda static metoder.

Exempel: Metoder i Java

Nu har vi lärt oss hur man skapar metoder i Java, men låt oss nu ta ett par exempel och använda det vi har gått igenom.

Exempel 1: Skapa en enkel metod i Java som skrivet ut text

Vi börjar med ett enkelt exempel där vi skapar en metod som varje gång den anropas (används) ska skriva ut en text.

public class Exempel {

    // Skapar en metod som heter my_method
    public static void my_method(){
        System.out.println("Detta är min första metod"); 
    }

    public static void main(String[] args) {
        my_method();  // Anropa metoden
        my_method();  // Anropa metoden
        my_method();  // Anropa metoden
    }
}
  • Det vi har gjort ovan är då att skapa en metod som heter my_method.
  • my_method är en void metod, vilket betyder att den inte returnerar någonting.
  • Det är även så att my_method inte tar någon inparameter. Det vill säga, metoden har ingen input och returnerar inte heller någonting.

Avslutningsvis, för att använda metoden my_method som vi precis skapade så anropar vi den genom att skriva metodens namn följt av de inparametrar som metoden ska ta emot. Om vi kör programmet ovan så får vi utskriften

Detta är min första metod
Detta är min första metod
Detta är min första metod

Exempel 2: Skapa en metod som summerar två tal

I det här exemplet ska vi skapa en metod som ska ta två heltal (int) som inparametrar. Sedan ska metoden addera de två talen och returnera en double.

public class Exempel {

    // Metod som adderar två tal
    public static double addNumbers (int a, int b){
        return (a + b);
    }

    public static void main(String[] args) {
        // De två inparametrarna till metoden 
        int inputA = 10;
        int inputB = 4;
        
        // Använder metoden och skriver ut svaret
        System.out.println(addNumbers(inputA,inputB));

    }
}

Om vi tittar lite närmare på koden, det vi har gjort är att

  • Skapat en metod som har fått namnet addNumber.
  • Metoden kommer att returnera en double.
  • Vi kommer att ha två stycken inparametrar till metoden av datatyp int. Den första inparametern heter a och den andra heter b.
  • Slutligen vi returnerar summan av de två inparametrarna.

Notera att vi kan köra metoden direkt i kommandot för att skriva ut text i konsolen. Om vi vill så går det självklart att först spara ned värdet i en variabel och sedan skriva ut värdet på variabeln.

Exekverar vi programmet ovan så får vi utskriften

14

Exempel 3: Metoder för att kontrollera om angiven portkod är korrekt

Vi tar ett tredje och sista exempel för den här artikeln. Det vi ska göra är att programmera ett enkelt program som ska jämföra om den, till exempel, portkod som användaren anger överensstämmer med den angivna portkoden.

  • Den angivna koden är 4698. Vi kommer använda en metod som jämför input från användaren mot den angivna koden och returnera en boolean variabel.
  • Om den angivna koden stämmer så skriver vi ut att det är rätt kod och att dörren är öppen.
  • Är det inte rätt ska vi skriva ut det.
  • Vi kommer använda en metod för respektive utskrift ovan.
  • Slutligen, vi använder klassen scanner för att ta in information av användaren.

Om vi tar och skriver in det i kodeditorn så får vi,

// Importerar klassen Scanner
import java.util.Scanner;

public class Exempel {

    // Metod för att kontrollera koden
    public static boolean checkEntCode (int userIn){

        if (userIn == 4698){
            return true;
        }
        return false;
    }

    // Metod för skriva ut info vid rätt kod
    public static void printOpen (){
        System.out.println("Rätt kod : Dörren öppnas");
    }

    // Metod för skriva ut info vid fel kod
    public static void printClosed (){
        System.out.println("Fel kod : Dörr låst");
    }

    public static void main(String[] args) {

        // Ber användaren skriva in information
        System.out.println("Ange lösenord: ");

        // Skapar en instans av klassen scanner
        Scanner input = new Scanner(System.in);

        // Spara ned input från användaren
        int userIn = input.nextInt();
        
        /* Använder metoden ovan för att kontrollera 
        om koden är korrekt (true) */
        if (checkEntCode(userIn)){
            printOpen();
        }
        else{
            printClosed();
        }
    }
}

Avslutningsvis, i det här fallet blir det svårt att skriva ut vad svaret eftersom det beror på vad användaren skriver in. Kopiera gärna koden och testa själv.

Sammanfattning: Metoder i Java

Metoder i Java är ett kraftfullt verktyg för att återanvända och strukturera vår kod. Vi kan använda metoder för att förenkla och bryta ned våra program i mindre delar, för att sedan lösa de mindre delarna som tillsammans bygger ihop helhetslösningen. Att använda en metod kallas att man anropar den och det som blir resultatet av det anropet kallas för det som metoden returnerar. När man skapar en metod så behöver man specificera vad metoden ska returnera och vilka inparametrar som metoden ska ta in och använda.

Vanliga frågor och svar: Metoder i Java

Vad är en metod i Java?

En metod i Java utför ett kodblock, med andra ord, en sekvens av operationer, varje gång man använder metoden. En metod i Java är ett verktyg som hjälper oss att återanvända och strukturera vår kod.

Vad betyder void i en metod?

Om ingen datatyp ska returneras anger man det reserverade ordet void. Det betyder att om vi inte vill att vår metod ska returnera tillbaka något så ska vi använda en void metod.

Kan en metod ha flera olika inparametrar?

Ja det går bra. Varje inparameter specificeras med datatyp och namn för att sedan separeras med ett kommatecken. Det går att ange hur många inparametrar som helst till en metod.

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!