Po wprowadzeniu podstaw klas i zmiennych nadszedł czas na ostatni z podstawowych klocków, które składają się na program – metody, zwane również funkcjami (a przynajmniej na poziomie podstawowym można śmiało te dwie nazwy stosować naprzemiennie). Na tapetę bierzemy, więc linijkę public static void main(String[] args)
UWAGA! Kurs darmowy, zaktualizowany na stan z roku 2020 dostępny na https://kursy.clockworkjava.pl/java-fundamenty-programowania/
Format wideo filmu znajduję się na końcu wpisu.
Do czego przydają się metody?
Funkcje mają dwie podstawowe… well, funkcje. Po pierwsze pozwalają na czytelniejszą organizację kodu – zbierają w jedno miejsce daną funkcjonalność. Na przykład mamy taki kawałek kodu:
public static void main(String[] args) { System.out.println(" Witaj w systemie rezerwacji"); System.out.println(); System.out.println(" --- Hotel Clockwork Java --"); System.out.println(" ul. Programistów 32"); System.out.println(" 31-333 Kraków"); System.out.println(" tel. 322 444 123"); System.out.println(); System.out.println(" Autorem systemu jest: "); System.out.println(" Clockwork Java "); System.out.println(" ul. Programistów 32"); System.out.println(" 31-333 Kraków"); }
Wpisze nam on na konsolę informację o adresie hotelu i twórcy oprogramowania. Prostszego kodu nie znajdzie się, ale i tu jest pole do poprawy, właśnie dzięki funkcjom. Możemy do jeden funkcji dodać kod wypisujący dane hotelu, a do drugiej dane firmy. Będzie wyglądało to tak:
public class Hello { public static void main(String[] args) { System.out.println(" Witaj w systemie rezerwacji"); System.out.println(); displayHotelInformation(); System.out.println(); displayCompanyInformation(); } public static void displayCompanyInformation() { System.out.println(" Autorem systemu jest: "); System.out.println(" Clockwork Java "); System.out.println(" ul. Programistów 32"); System.out.println(" 31-333 Kraków"); } public static void displayHotelInformation() { System.out.println(" --- Hotel Clockwork Java --"); System.out.println(" ul. Programistów 32"); System.out.println(" 31-333 Kraków"); System.out.println(" tel. 322 444 123"); } }
Utworzyliśmy dwie funkcje – displayCompoanyInformation oraz displayHotelInformation, gdzie przenieśliśmy kod odpowiedzialny za wyświetlanie stosownych informacji. Zwróć uwagę, że zostały one dodane na tej samej „wysokości” w klasie Hello, co metoda main.
Dzięki takiemu zabiegowi o wiele szybciej można zrozumieć co robi metoda main – wcześniej w wyobrażni czytającego, bez analizy kodu tylko „na rzut oka”, pojawiał się obraz „metoda main wyświetla szereg tekstów”. Po odpowiednim nazwaniu metod, na które rozbiliśmy metode main powinno się to zmienić na „metoda main wyświetla powitanie, a następnie informację o hotelu, a po nich informację o firmie”.
To jest bardzo istotne rozróżnienie w programowaniu – między tym co dany kawałek kodu ma robić wysokopoziomowo, a jak wygląda jego szczegółowa implementacja.
Drugą zaletą używania funkcji jest unikanie duplikacji kodu. W naszym prostym przykładzie dwukrotnie wypisujemy ten sam adres. Możemy więc przenieść te dwie linijki do osobnej funkcji. W ten sposób:
public class Hello { public static void main(String[] args) { System.out.println(" Witaj w systemie rezerwacji"); System.out.println(); displayHotelInformation(); System.out.println(); displayCompanyInformation(); } public static void displayCompanyInformation() { System.out.println(" Autorem systemu jest: "); System.out.println(" Clockwork Java "); displayAddress(); } public static void displayHotelInformation() { System.out.println(" --- Hotel Clockwork Java --"); displayAddress(); System.out.println(" tel. 322 444 123"); } private static void displayAddress() { System.out.println(" ul. Programistów 32"); System.out.println(" 31-333 Kraków"); } }
Tak więc po naszym podziale dostaliśmy taki obraz:
Duży kawałek kodu został podzielony na mniejsze, dzięki czemu osobom analizującym go (a kod czyta się generalnie o wiele częściej niż się go pisze) jest o wiele łatwiej, bo mogą się skupić na każdym z małych kawałeczków, a następnie osadzać je w większej całości.
Anatomia funkcji
Na zakończenie tego wpisu przyjrzyjmy się jeszcze pobieżnie jak wygląda deklaracja nowej funkcji. Na przykładzie dwóch funkcji:
public static void main(String[] args) { }
public int add(int a, int b) { int result = a + b; return result; }
- public – jest to określenie poziomu widoczności, o którym wspominałem już przy okazji omawiania klas
- static – nas chwilowo nie interesuje, jest to opcjonalne.
- void – jest to określenie typu jaki dana funkcja zwraca. Void oznacza, że funkcja nie zwraca nic, może tu występować na przykład String bądź jak w przypadku drugiej funkcji – int.
- main – jest to nazwa funkcji, zdefiniowana przez nas. Zaczyna się z małej litery, pisana camelCase i, jak wszystko w programowaniu, „z angielska”. W drugim przykładzie jest to add
- (String[] args) (int a, int b)– jest to deklaracja argumentów jakie dana funkcja może przyjmować. W pierwszym przypadku jest to zestaw wartości typu String. Args jest to nazwa własna zdefiniowana przez osobe tworzącą kod, dla danego argumentu. W drugim przypadku mamy funkcję, która przyjmuje dwa argumenty typu int o nazwach, odpowiednio a i b. Metody mogą mieć dowolną ilość argumentów.
- { } – w nawiasach znajduje się ciało metody – czyli kod, który ma się wykonać. Tu możemy odwołać się do przekazanych argumentów po ich nazwach jak i zwrócić jakąś wartość poprzez użycie komendy return
Wywołanie funkcji
By wywołać funkcję, należy użyć jej nazwy i w nawiasach okrągłych podać jej argumenty. Na przykład displayHotelInformation()
woła metodę displayHotelInformation, która nie ma żadnych argumentów.
Natomiast by wywołać i przypisać wynik działania funkcji do nowej zmiennej z poniższej funkcji:
public int add(int a, int b) { int result = a + b; return result; }
tworzymy taki kod
int x = add(2,6)
co do zmiennej x przypiszę wartość 8.
Na tym zakończymy wprowadzenie metod, bo gdybyśmy chcieli zbadać je dogłębnie to wyszedłby artykuł, a nie wpis, ale do wszystkiego dotrzemy.
Zapraszam za zapisywania się na listę mailingową bloga oraz mam prośbę – jeśli wpis ten, i kurs, przypadł Ci do gustu – podziel się nim na facebooku czy innych mediach społecznościowych jakie preferujesz.
Słowniczek
- Metoda (funkcja) – wydzielony kawałek kodu wykonujący jakieś operacje, możliwy do wykonania podczas działania programu. Stosuje się je, aby uprościć program główny i zwiększyć czytelność kodu.
Zadania domowe
- Stwórz i wywołaj metodę, która przyjmuje dwa argumenty typu int i zwraca wynik ich mnożenia.
- Stwórz i wywołaj metodę, która przyjmuje żadnych argumentów oraz nic nie zwraca, wypisuję na ekran tylko Twoje imię i nazwisko.