Fortran/Procedury i funkcje
Tworząc programy niejednokrotnie zdarzy Ci się powtarzać kilkakrotnie ten sam fragment kodu. Będzie on dotyczył różnego rodzaju czynności. Może także się zdarzyć, że będziesz potrzebował użyć języka Fortran w projekcie, który będzie tworzony przy użyciu języka C. W podobnych przypadkach użyjesz funkcji. Funkcję można zdefiniować jako wydzielony fragment programu wyspecjalizowany do wykonywania określonej czynności. W tytule tego rozdziału zostało także użyte słowo procedura. Jest to z kolei pewien przypadek funkcji, kiedy nie zwraca ona żadnej wartości – np. wyniku obliczeń. Różni się ona przy tym sposobem deklaracji oraz wywołania.
Korzystanie z funkcji
edytujUcząc się trudnej sztuki programowania z tego podręcznika spotkałeś się już z funkcjami. Dobrym przykładem mogą tu być funkcje write oraz print, które służą do obsługi wyjścia programu. Funkcję wywołuje się w następujący sposób (elementy w nawiasach kwadratowych są nieobowiązkowe):
[zmienna =] nazwa_funkcji([argumenty funkcji])
W języku Fortran istnieje także możliwość przypisania funkcji pewnej wartości i korzystania z niej jako ze zmiennej. Oto jej deklaracja:
nazwa_funkcji([argumenty funkcji]) = wartość
Deklarowanie funkcji
edytujW języku Fortran funkcję definiuje się w sposób następujący:
[typ danych] FUNCTION nazwa_funkcji ([argumenty funkcji]) instrukcje... END
Zwracanie wartości
edytujW przeciwieństwie do np. C, w Fortranie wartość, która ma zostać zwrócona, jest przypisywana nazwie funkcji. Natomiast słowo RETURN powoduje natychmiastowe wyjście z funkcji. Wygląda to mniej więcej tak:
real function kwadrat (a) real, intent(in) :: a kwadrat = a**2 return end function
Funkcja rekurencyjna
edytujW języku Fortran stworzenie funkcji rekurencyjnej nie jest takie proste, a dodatkowo nie jest zgodne ze standardem f77. Aby funkcja mogła wywołać samą siebie, musimy użyć słowa recursive:
recursive function nazwa nazwa() end function nazwa
Procedura
edytujOprócz funkcji, wyróżniamy jeszcze procedurę. Definiuje się ją tak:
subroutine nazwa_procedury ([argumenty]) instrukcje [return] end subroutine nazwa_procedury
Aby wywołać procedurę, musisz użyć instrukcję call:
call nazwa_procedury ([argumenty])