Co to jest funkcja?
W mojej krótkiej karierze mentorskiej bardzo często spotykałem się z problemami w rozumieniu najbardziej podstawowych pojęć takich jak zmienna czy funkcja. Definicja niestety nie zawsze pomaga. Postaram się troszkę szerzej podejść do tego, co się kryje pod pojęciem funkcja.
Z tego artykułu dowiesz się:
Co to jest funkcja i do czego służy
Jaka jest różnica pomiędzy deklaracją a wywołaniem funkcji
Jak deklarować i wywoływać funkcje
Co się stanie, jeśli wywołamy funkcję, która nie istnieje
W mojej krótkiej karierze mentorskiej bardzo często spotykałem się z problemami w rozumieniu najbardziej podstawowych pojęć takich jak zmienna czy funkcja. Definicja niestety nie zawsze pomaga. Postaram się troszkę szerzej podejść do tego, co się kryje pod pojęciem funkcja.
Funkcja to słowo, które wywodzi się z języka łacińskiego i oznacza nic innego jak „wykonywanie”. Właściwie tutaj powinniśmy się zatrzymać i zastanowić właśnie nad tym tłumaczeniem. Zarówno w każdym języku programowania, jak i w realnym świecie słowo funkcja oznacza to samo, przykładowo: telewizor ma funkcję wyświetlania obrazu, kalkulator ma funkcję liczenia, organizmy żywe mają funkcje życiowe, jak oddychanie.
Logiczne, prawda?
Deklaracja a wywoływanie
Aczkolwiek samo posiadanie funkcji nie zawsze związane jest bezpośrednio związane z jej wykonywaniem. Zwróćcie uwagę, że telewizor sam nie będzie wyświetlał obrazu, kalkulator nie będzie sam liczył, a człowiek nie będzie sam oddychał (pomimo, iż wydaje się nam, że tak właśnie jest). Zawsze pojawia się jakiś impuls, który spowoduje, że dana funkcja zacznie działać.
W telewizorze odpowiedzialny za uruchomienie funkcji wyświetlania jest pilot, który w zależności od spełnionych innych warunków, uruchomi pożądaną funkcjonalność. Co to mogą być za warunki? Na przykład stały dopływ prądu, odpowiednie ukierunkowanie pilota czy sama budowa telewizora. Podobnie jest z człowiekiem - oddycha, ale płuca, oskrzela czy przepona bez odpowiedniego impulsu z mózgu nie funkcjonowałyby. Dostrzegasz zależność?
Samo istnienie funkcji, nie oznacza, że ona działa i wykonuje to, do czego została stworzona.
W programowaniu istnieją te same zasady.
Spójrzmy na poniższy przykład napisany w języku Javascript:
Jak widzisz funkcja, którą napisałem nazywa się showWarning
i co do zasady będzie wyświetlać informacje z ostrzeżeniem. Funkcja powstała, ale nic nie robi z dwóch powodów:
funkcja nie została jeszcze zaimplementowana - innymi słowy musimy napisać, w jaki sposób będziemy wyświetlać ostrzeżenie,
funkcja nie została jeszcze wywołana.
Wywoływanie istniejących funkcji
Jeśli chcemy wywołać istniejącą funkcję, wystarczy, że podamy jej nazwę, a na końcu dodamy ()
. W tych nawiasach możemy przekazać parametry naszej funkcji, czyli możemy wskazać jej z jakimi danymi powinna zostać wywołana. To tak, jak z niszczarką do papieru, która w zależności od grubości papieru i wybranej dokładności niszczenia użyje innych noży.
Nasza funkcja istnieje i została wywołana bez parametrów, więc działa. Tylko, że nadal nic nie robi. Dopiszmy zatem troszkę kodu.
Funkcje, z których możemy korzystać podczas tworzenia oprogramowania, to nie tylko te, które sami napisaliśmy. Istnieje cała gama funkcji dostarczanych razem z językiem, z których możemy skorzystać. Wystarczy tylko wiedzieć o ich istnieniu, można np. zaczerpnąć tę wiedzę z dokumentacji i wywołać je. Skorzystajmy z funkcji alert. Funkcja ta pozwoli nam wyświetlić użytkownikowi odpowiedni komunikat. Wiadomość taką, przekażemy jej za pomocą pierwszego parametru tej funkcji. Zmodyfikujmy odpowiednio naszą funkcję showWarning
.
Teraz, gdy tylko wywołamy naszą funkcję wyświetli się nam komunikat, który przekazaliśmy w pierwszym parametrze. Aby nasza funkcja była rzeczywiście użyteczna powinna być również reużywalna. Możemy się spodziewać, że wielokrotnie będziemy chcieli gdzieś wyświetlić różne ostrzeżenia w naszym programie. Podczas deklarowania funkcji możemy nazwać parametry, które do niej będziemy przekazywać. Nasza funkcja showWarning
powinna na pewno wiedzieć jaka będzie treść wiadomości, którą będziemy chcieli wyświetlić. Nazwijmy ten parament message
.
Chcąc ją dodatkowo rozbudować możemy dodać drugi argument, który będzie mówił o ważności naszego komunikatu. Zmodyfikujmy ją tak, aby tekst był napisany kapitalikami, jeśli funkcja zostanie wywołana z drugim argumentem o wartości true
. Nazwijmy ten argument isImportantMessage
. Do dzieła.
W powyższym przykładzie pozwoliłem sobie od razu napisać dwa wywołania naszej funkcji. Zwróć uwagę, że zawsze pierwszy parametr, który przekazujemy do funkcji to treść komunikatu - javascript wykonując nasz kod, podstawi wartości, które przekazaliśmy do odpowiednich argumentów. A zatem - w pierwszym wywołaniu message
to 'To jest ważna wiadomość'
, a w drugim Ta wiadomość nie jest tak istotna
.
Wywoływanie nieistniejących funkcji
Tutaj sprawa jest dosyć prosta - nie można wywołać funkcji, która nie istnieje. To tak jakby ktoś kazał Ci oddychać pod wodą - zapewne nie posiadasz takiej umiejętności. Jeśli mam rację podczas próby Twój organizm zbuntuje się i może się to dla Ciebie bardzo źle skończyć. Tak samo javascript - jeśli spróbujesz wywołać funkcję, której nie ma ani w dokumentacji, ani jej nie przygotowałeś, wówczas Twój program przestanie działać, a do konsoli przeglądarki zostanie zalogowana na czerwono informacja: Uncaught ReferenceError: function is not defined
.
Kod nie może zadziałać, bo po prostu nie wie o co nam chodziło.
Wystrzegaj się zatem literówek, sprawdzaj konsolę i zawsze pomyśl czy możesz daną funkcję wywołać.
Podsumowanie
Temat funkcji jest bardzo szeroki i na pewno do niego jeszcze wrócę w ramach kolejnych artykułów. Mam nadzieję, że moje wyjaśnienia, poparte przykładami wyjętymi z rzeczywistości rozwikłają to, czym są funkcje i czym się różni ich deklaracja od wywołania.
Komentarze (0)
Jeszcze nikt nic nie napisał, ale to znaczy że... możesz być pierwszy/pierwsza.