Przeczytaj
Czym jest funkcja?
Wspomnieliśmy już, że funkcja jest wydzieloną częścią kodu, odpowiedzialną za wykonanie określonych zadań. Jeżeli piszemy rozbudowany program, stanie się on bardziej przejrzysty po rozbiciu całości na funkcje.
Co istotne, funkcje ułatwiają użycie tej samej sekwencji poleceń w różnych częściach programu. Zamiast powielać za każdym razem identyczne wycinki kodu, wywołujemy zawierającą je funkcję.
Gdybyśmy wreszcie chcieli edytować powtarzające się fragmenty kodu, dzięki zastosowaniu funkcji robimy to tylko raz. Poprawiamy wówczas samą funkcję, nie musząc zmieniać programu w wielu miejscach.
Pierwsza funkcja w języku Java
Oto deklaracja przykładowej funkcji w Javie:
Słowa kluczowe public
oraz static
omówimy w innym e‑materiale. Na razie musisz pamiętać, aby zawsze używać ich podczas deklarowania funkcji.
Przejdziemy do określenia typu danych zwracanego przez funkcję. Przede wszystkim trzeba podkreślić, że każda zmienna zdefiniowana wewnątrz funkcji jest zmienną lokalną. Oznacza to, że nie można odwołać się do niej spoza funkcji, a sama zmienna jest usuwana, gdy tylko funkcja zakończy działanie.
Co jednak zrobić w sytuacji, gdy funkcja ma wykonać jakieś obliczenia? Zapewne chcielibyśmy poznać ich wyniki, więc zależy nam na tym, aby nie zniknęły one z pamięci.
Otóż można sprawić, że funkcja przed zakończeniem działania zwróci jakąś wartość – na przykład przekaże programowi głównemu rezultat wykonanych operacji matematycznych. Musimy jednak poinformować kompilator, jakich danych powinien się spodziewać.
Wróćmy zatem do definicji funkcji. Tuż po słowach public
i static
musimy podać typ zwracanych wartości. Rezultatem działania przykładowej funkcji będzie liczba całkowita (int
).
Jeżeli nie chcemy, aby funkcja zwracała jakąkolwiek wartość, jako typ danych wpisujemy void
(czyli „pusty”). Robimy tak choćby w przypadku definiowania funkcji, której zadaniem jest wyświetlanie komunikatów; nie zwraca ona nic programowi głównemu.
Funkcja, dla której określimy typ zwracanych danych, musi takie właśnie dane zwrócić. W przeciwnym przypadku pojawią się błędy kompilacji.
Tuż za typem zwracanych wartości podajemy nazwę funkcji. W naszym przypadku brzmi ona: dodajLiczby
. Będziemy się nią posługiwali podczas wywoływania funkcji.
Gdy funkcja nie będzie przyjmować żadnych parametrów, za nazwą stawiamy parę okrągłych nawiasów: ()
– i deklaracja jest gotowa. Kiedy jednak chcemy przekazać funkcji jakieś parametry, musimy je opisać.
Argument jest wartością przekazaną do parametru funkcji. Parametry deklarujemy wewnątrz nawiasów okrągłych, wskazując ich typy i nazwy. Nie ma ograniczeń co do liczby przekazanych parametrów; musimy tylko oddzielić je przecinkami. W zaprezentowanym przykładzie mamy dwa parametry typu całkowitego (int
) o nazwach argumentFunkcji
oraz drugiArgumentFunkcji
.
Kiedy jako argument przekazujemy zmienną, funkcja tworzy lokalną kopię jej wartości. Oznacza to, że jeżeli wewnątrz funkcji zmienna zostanie zmodyfikowana, nie będzie miało to wpływu na jej oryginalną wartość.
Po deklaracji zapisujemy ciało funkcji, czyli instrukcje, które zostaną wykonane po jej wywołaniu. Polecenia te umieszczamy w parze nawiasów klamrowych. W przykładowej funkcji definiujemy zmienną lokalną wynikDoZwrocenia
i przypisujemy jej sumę podanych argumentów.
Dalej pojawia słowo kluczowe returnreturn
. Jest to polecenie zatrzymania działania funkcji i zwrócenia programowi głównemu wskazanej wartości (w tym przypadku jest nią wynikDoZwrocenia
). Podkreślmy to wyraźnie: polecenie return
oznacza natychmiastowe opuszczenie funkcji. Ostatnia komenda w przykładzie – System.out.println...
– jest więc przewrotna, bo nigdy nie zostanie wykonana, choć z punktu widzenia składni języka Java najzupełniej poprawna.
Jeżeli chcemy przerwać działanie funkcji, która nie zwraca żadnej wartości (czyli przed jej nazwą pojawiło się słowo void
), możemy zrobić to w dowolnym momencie, wydając polecenie return
(i pamiętając aby nie podawać żadnej wartości do zwrócenia).
Wywołanie funkcji
Gdy chcemy użyć funkcji w którymkolwiek miejscu programu, po prostu podajemy jej nazwę (oraz argumenty, o ile są one niezbędne):
Zdefiniowana wcześniej funkcja dodajLiczby
zwraca wartość typu int
. Przypisaliśmy ją zmiennej wynikDzialaniaFunkcji
. Jeżeli funkcja nie oczekuje argumentów, za jej nazwą umieszczamy pustą parę okrągłych nawiasów.
Gdy funkcja wymaga podania argumentów, ale ich nie otrzyma (bądź przekażemy jej złą liczbę argumentów), mogą pojawić się błędy kompilacji.
Kolejną część lekcji poświęcimy przykładom wykorzystania funkcji.
Słownik
polecenie przerywające wykonywanie funkcji i zwracające wskazaną za nim wartość programowi nadrzędnemu
element składni języka, który jest definiowany przy deklaracji metody lub funkcji; deklarujemy go w nagłówku podprogramu; umożliwia komunikację pomiędzy podprogramem (funkcją/metodą), a programem go wywołującym
element składni w określonym języku programowania, który w wyniku wywołania podprogramu zostaje utożsamiony (skojarzony) z określonym parametrem podprogramu
zwany również deklaracją; funkcja która nie posiada ciała, a jedynie informuje kompilator o postaci parametrów oraz zwracanej wartości