5. Funkcje własne.

5.4. Wywołanie funkcji własnej

Wywołanie funkcji własnej odbywa się w taki sam sposób jak każdej innej funkcji standardowej. Najpierw należy napisać jej imię, a między () zapisuje się argumenty, które ta funkcja ma wykorzystać do realizacji swojego zadania. W omawianym przykładzie kodu 2 z rozdziału 5.2. Realizacja funkcji własnej w celu obliczenia zmiennej v po prawej stronie od = zapisano nazwę funkcji CylinderVolume. Następnie, w jej nagłówku na miejscu pierwszego argumentu zapisano zmienną r, a drugiego - h (rys. 1, linijka kodu nr 9).

Rys. 1. Schemat działania funkcji własnej.


W momencie kiedy program dochodzi do 9-ej linijki wywołuje on naszą funkcję, udostępnia jej dwie wartości i prosi o zwrot wyniku. W tym przykładzie funkcja tak naprawdę nie otrzymuje dostęp do "oryginalnych" wartości lecz tworzy ich kopie, z którymi pracuje. Sposoby przekazywania wartości do funkcji własnych zostały omówione w następnym rozdziale 5.5. Przekazywanie danych do funkcji własnej.

W chwili, kiedy funkcja CylinderVolume() otrzymuje cyfry 1.0 i 2.5, tworzy ona w pamięci RAM dwie zmienne typu double o nazwach radius oraz height i przypisuje im te wartości (linijka nr 15). Dalej funkcja pracuje już z tymi dwoma zmiennymi, a nie z r i h. Nazwy zmiennych nadane przez funkcję własną mogą być dowolne. Nie ma reguły, aby musiały być one identyczne lub koniecznie różniły się od tych, przekazanych do nagłówka funkcji w linijce nr 9.

Dalej funkcja tworzy jeszcze jedną zmienną volume, której przypisuje się wynik działania matematycznego (linijka nr 17). Następnie, jest ona przekazywana do nagłówka operatora return() (linijka nr 18), który zwraca ten wynik z powrotem do zmiennej v. Kiedy funkcja zakończy swoje zadanie, z pamięci RAM są usuwane zmienne radius, height i volime. Gdybyśmy w ciele skryptu drugi raz wywołali tę funkcję to ponownie utworzyła by ona w RAM te trzy zmienne, a po obliczeniu wyniku i przekazaniu go do skryptu, znowu wyczyściła by RAM z tych tymczasowych zmiennych.


Relacje między OnStart() a CylinderVolume() można zobrazować na przykładzie relacji szefa i pracownika (rys. 2).

Rys. 2. Relacje między OnStart a CylinderVolume.


Na przykład, szef potrzebuje znaleźć objętość walca. W swojej teczce ma dwie kartki papieru, na których są zapisane liczby 1.0 i 2.5. Pierwszą kartkę nazwał r, a drugą h. Wie, że ma pracownika o imieniu CylinderVolume, który potrafi błyskawicznie obliczyć objętość tej bryły geometrycznej. Woła go po imieniu i mówi: "Proszę obliczyć objętość walca. Promień jego podstawy jest równe 1.0, a wysokość 2.5". Pracownik wraca do swojego biurka, odsuwa na bok kubek ze świeżo zaparzoną kawą, bierze nową kartkę papieru, nazywa ją radius i zapisuje na niej 1.0. Drugą nazywa height i zapisuje na niej 2.5. Nie ma on pojęcia jak w swojej teczce nazwał szef kartki z tymi liczbami, po prostu nadał im takie nazwy bo jest mu tak wygodnie. Oblicza wynik i zapisuje go na nowej kartce o nazwie volume. Wraca do szefa i mówi wynik. Szef bierze nową kartkę papieru, nazywa ją v i zapisuje na niej wynik. W pełni zadowolony ze swojej pracy pracownik wraca do siebie i niszczy niepotrzebne już mu 3 kartki radius, height i volume.