Rozdział 7 - Metody - Czym są metody?

Metody w programowaniu to nazwane, wydzielone fragmenty kodu. Ich celem jest wykonanie określonego zadania, jak np.:

  • policzenie pola koła,
  • zapisanie w bazie danych informacji o złożeniu przez użytkownika nowego zamówienia,
  • znalezienie w danym tekście pewnego ciągu znaków,
  • posortowanie tablicy liczb,
  • pobranie od użytkownika danych (w rozdziale trzecim zaczęliśmy używać dwóch metod do wczytywania danych wpisanych przez użytkownika w oknie konsoli):
    public static int getInt() {
      return new Scanner(System.in).nextInt();
    }
    
    public static String getString() {
      return new Scanner(System.in).next();
    }
    
  • ...i wiele, wiele innych.

Ciało metody stanowi kod źródłowy zawarty między dwoma nawiasami klamrowymi { }. Nawiasy klamrowe są zawsze wymagane, nawet, gdy ciało metody stanowi tylko jedna instrukcja.

Metody:

  • mają nazwę, zgodną z nazewnictwem obiektów w Javie,
  • mogą (ale nie muszą) przyjmować argumenty,
  • mogą (ale nie muszą) zwracać wartość, za pomocą użycia słowa kluczowego return,
  • mogą mieć modyfikatory – poznamy je w rozdziale o klasach – na razie nasze metody zawsze będziemy poprzedzać modyfikatorami public static.
W innych językach programowania możemy spotkać się z określeniami funkcja oraz procedura w odniesieniu do metod. Procedury to zazwyczaj takie funkcje, które nie zwracają żadnego wyniku.

Pierwszą metodą, której używaliśmy i którą sami napisaliśmy, była metoda main. Korzystaliśmy w niej z kilku innych metod, dla przykładu – println("tekst") z obiektu System.out oraz length() podczas używania zmiennych typu String.

Spójrzmy na opisane powyżej elementy metod na przykładzie metody main z naszego pierwszego programu oraz metody getInt, którą wprowadziliśmy w trzecim rozdziale:

Elementy metod

Aby "uruchomić" metodę, tzn. kazać naszemu programowi ją wykonać, należy ją wywołać. Wywołanie metody odbywa się poprzez napisanie nazwy metody oraz dwóch nawiasów ( ), pomiędzy którymi powinny być zawarte argumenty metody (o ile jakieś przyjmuje). Nawiasy ( ) są wymagane nawet wtedy, gdy metoda nie przyjmuje żadnych argumentów.

Spójrzmy na przykład użycia metody, która wypisuje sumę dwóch przesłanych do niej liczb:

Nazwa pliku: WypiszSume.java
public class WypiszSume {
  public static void main(String[] args) {
    wypiszSume(100, 200);
    wypiszSume(-5, -20);
    wypiszSume(0, 0);
  }

  public static void wypiszSume(int a, int b) {
    System.out.println(a + b);
  }
}

Pod metodą main zdefiniowaliśmy nową metodę:

  • jej nazwa to wypiszSume,
  • nie zwraca ona żadnej wartości (użycie słowa kluczowego void),
  • przyjmuje jako argumenty dwie liczby całkowite o typie int i nazwach a oraz b,
  • jej ciało składa się z jednej instrukcji, która ma za zadanie wypisać na ekran sumę przesłanych do niej argumentów,
  • ma dwa modyfikatory: public oraz static (poznamy je w rozdziale o klasach).

Następnie, w metodzie main wywołujemy naszą nową metodę trzykrotnie z różnymi argumentami. Odbywa się to poprzez napisanie nazwy metody oraz zawarcie w nawiasach ( ) argumentów, z jakimi ją wywołujemy. Argumenty te rozdzielone są przecinkami. Na końcu linii następuje średnik:

wypiszSume(100, 200);
wypiszSume(-5, -20);
wypiszSume(0, 0);

Rezultatem wykonania powyższego programu jest wypisanie na ekran wartości:

300 -25 0

Do czego potrzebne są metody?

Zauważmy w przykładzie z poprzedniego rozdziału, że definicję (ciało, nazwę, argumenty, zwracany typ) metody wypiszSume napisaliśmy tylko raz, a potem mogliśmy z niej wielokrotnie korzystać.

Wyobraźmy sobie teraz, że piszemy program, w którym musimy napisać wyszukiwanie w bazie danych zamówień klienta. Jest to złożona operacja i możemy:

  • w każdym miejscu naszego programu napisać kod odpowiedzialny za szukanie zamówień klienta
  • lub
  • napisać metodę, której zadaniem będzie szukanie i zwracanie zamówień klienta i korzystać z niej w różnych miejscach naszego programu.

Drugie podejście ma wiele zalet:

  1. Nie duplikujemy kodu – logika szukania zamówień klienta będzie tylko w jednym miejscu.
  2. Jeżeli będziemy musieli coś zmienić w sposobie szukania zamówień klienta, to będziemy to musieli zrobić tylko w jednej metodzie.
  3. Opakowanie kodu w metodę, która ma nazwę, zwracany typ i argumenty, opisuje ten fragment kodu i zwiększa jego czytelność.
  4. Nasz program będzie bardziej spójny ponieważ będzie korzystał z jednego sposobu na szukanie zamówień.
  5. Łatwiej będzie przetestować nasz program, ponieważ testowanie szukania zamówień sprowadzi się do przetestowania jednej, dedykowanej do tego celu metody.

Dzięki pisaniu metod, możemy wielokrotnie korzystać z pewnej funkcjonalności. Metody dzielą także nasz program, opakowując logicznie powiązane ze sobą fragmenty kodu.

Duplikacja kodu jest złą praktyką. Gdy duplikujemy kod, musimy, w przypadku wymaganej zmiany, znaleźć i zmienić wszystkie jego wystąpienia. Do duplikowanego kodu także łatwo wkradają się błędy, dlatego warto pisać metody, które dostarczą wymaganą funkcjonalność, i korzystać z nich w innych miejscach programu, gdzie ta funkcjonalność jest potrzebna.

Podsumowanie podstaw metod

  • Metody to nazwany fragmenty kodu, które wykonują pewne zadania, jak na przykład:
    • policzenie pola koła,
    • zapisanie w bazie danych informacji o zamówieniu,
    • posortowanie ciągu liczb.
  • Dzięki metodom, możemy wielokrotnie korzystać z pewnej funkcjonalności (jak np. szukanie zamówień klienta), zamiast duplikować ten sam kod w wielu miejscach naszego programu.
  • Ciało metody to zestaw instrukcji, które wykonywane są w ramach działania tej metody.
  • Ciało metody zawarte jest pomiędzy nawiasami klamrowymi { }
  • Metody muszą mieć nazwę zgodną z nazewnictwem obiektów w Javie:
    • przykłady poprawnych nazw: dodajLiczby, zapiszZamowienieKlienta, policzSilnie, zapiszdaneklienta (chociaż ta ostatnia nie spełnia reguły camelCase, tzn. drugi i trzeci wyraz w nazwie nie ma wielkiej pierwszej litery),
    • przykład niepoprawnych nazw: 2doKwadratu (zaczyna się od liczby), *mnozenieLiczb (zaczyna się od znaku *).
  • Metody mogą przyjmować argumenty i mogą zwracać wartość za pomocą słowa kluczowego return. Jeżeli metoda nic nie zwraca, to używamy słowa kluczowego void.
  • Metody mogą mieć modyfikatory – na razie używamy modyfikatorów public static (te i inne modyfikatory poznamy w kolejnym rozdziale).
  • Pierwszą metodą, jaką sami napisaliśmy, była metoda main w każdym z naszych programów. Inna używaną przez nas metodą była metoda getInt, która pobierała od użytkownika liczbę i zwracała ją.
  • Opis składowych metod: Elementy metod
  • Aby uruchomić metodę, należy ją wywołać poprzez napisanie nazwy metody oraz dwóch nawiasów ( ), pomiędzy którymi powinny być zawarte argumenty metody (o ile jakieś przyjmuje). Nawiasy ( ) są wymagane nawet wtedy, gdy metoda nie przyjmuje żadnych argumentów. Przykład użycia metody:
    public class WypiszSume {
      public static void main(String[] args) {
        wypiszSume(100, 200);
        wypiszSume(-5, -20);
        wypiszSume(0, 0);
      }
    
      public static void wypiszSume(int a, int b) {
        System.out.println(a + b);
      }
    }
    

Pytania do podstaw metod

  1. Spójrz na poniższą metodę i odpowiedz na pytania:
    1. Co robi ta metoda?
    2. Jakie argumenty przyjmuje i co zwraca?
    3. Czy i w jaki sposób ta metoda mogłaby być lepiej napisana?
    public static int wykonajDzialanie(int x, int y) {
      return x / y;
    }
    
  2. Co zrobić, aby użyć metody (wywołać ją)?
  3. Które z poniższych są poprawnymi nazwami metod?
    1. _mojaMetoda
    2. zapiszUstawienia
    3. zapiszKosztW$
    4. 5NajlepszychOfert
    5. pobierz5OstatnichZamowien

Odpowiedzi do pytań

Zadania do podstaw metod

Metoda wypisująca Witajcie!

Napisz metodę, która wypisuje na ekran tekst Witajcie! i użyj jej w metodzie main.

Metoda odejmująca dwie liczby

Napisz metodę, która wypisuje na ekran wynik odejmowania dwóch przesłanych do niej liczb i użyj jej w metodzie main.

Rozwiązania do zadań

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Nie musisz podawać swojego imienia, e-mailu, ani strony www, aby opublikować komentarz. Komentarze muszą zostać zatwierdzone, aby były widoczne na stronie.