Spis treści
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.
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:
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:
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:
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:
- Nie duplikujemy kodu – logika szukania zamówień klienta będzie tylko w jednym miejscu.
- Jeżeli będziemy musieli coś zmienić w sposobie szukania zamówień klienta, to będziemy to musieli zrobić tylko w jednej metodzie.
- Opakowanie kodu w metodę, która ma nazwę, zwracany typ i argumenty, opisuje ten fragment kodu i zwiększa jego czytelność.
- Nasz program będzie bardziej spójny ponieważ będzie korzystał z jednego sposobu na szukanie zamówień.
- Ł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.
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:
- 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¶
- Spójrz na poniższą metodę i odpowiedz na pytania:
- Co robi ta metoda?
- Jakie argumenty przyjmuje i co zwraca?
- Czy i w jaki sposób ta metoda mogłaby być lepiej napisana?
public static int wykonajDzialanie(int x, int y) { return x / y; }
- Co zrobić, aby użyć metody (wywołać ją)?
- Które z poniższych są poprawnymi nazwami metod?
- _mojaMetoda
- zapiszUstawienia
- zapiszKosztW$
- 5NajlepszychOfert
- pobierz5OstatnichZamowien
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.